我有以下代码:
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?
感谢您的帮助。
答案 0 :(得分:1)
问题是byte
已签名,因此10000000
已翻译(2位补码)至-128。使用short
代替byte
。
要将所有位初始化为0,只需执行short my_byte = 0;
P.s:short是16位,与字节不同,是8位,AFAIK在Java中没有8位无符号原语类型