位移字节

时间:2013-05-30 10:58:21

标签: java byte bit

我有以下代码:

byte my_byte;   
my_byte |= (1 << 7);
my_byte |= (1 << 6);    

我试图将my_byte中的第8位和第7位设置为1.使用调试器我发现在执行第1行后,my_byte的值为-128。执行第二行后,my_byte的值为-64。

我认为最终的结果是192(2 ^ 7 + 2 ^ 6)。有谁知道我做错了什么?

另外,我应该在开始时初始化my_byte吗?如果是这样,我如何将所有位设置为0?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题是byte已签名,因此10000000已翻译(2位补码)至-128。使用short代替byte。 要将所有位初始化为0,只需执行short my_byte = 0;

P.s:short是16位,与字节不同,是8位,AFAIK在Java中没有8位无符号原语类型