【问题标题】:Bit Shifting a Byte位移一个字节
【发布时间】:2013-05-30 19:03:20
【问题描述】:

我有以下代码:

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?

感谢您的帮助。

【问题讨论】:

    标签: java byte bit


    【解决方案1】:

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

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

    【讨论】:

    • char,是 Java 中唯一的无符号整数,也是一个不错的选择。
    • 谢谢你们的帮助。
    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多