0

我有以下代码:

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

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

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

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

谢谢您的帮助。

4

1 回答 1

1

问题是byte已签名,因此10000000将(2's-complement)翻译为-128。使用short而不是byte. 要将所有位初始化为 0,只需执行short my_byte = 0;

Ps:short 是 16 位,不像 byte 是 8 位,AFAIK 在 Java 中没有 8 位无符号原始类型

于 2013-05-30T11:03:20.107 回答