&0xFF

作者: 简书徐小耳 | 来源:发表于2018-12-17 14:48 被阅读11次

    https://blog.csdn.net/xmc281141947/article/details/74740061

    & 0xFF
    计算机内的存储都是利用二进制的补码进行存储的。
    比如我们int=-127 赋值给byte[0]时候 存储的其是其补码10000001(8位)。
    当我们把这个byte[0]输出的时候JVM做了一个补位1111111111111111111111111 10000001(32位)很显然这两个补码表示的十进制数字依然是相同的。
    -127的原码是前24位为0|11111111 反码是前24位为1|10000000 补码则是前24位为1|10000001
    二进制的最高位是符号位(有符号数成立 无符号数不成立)

    • 但是我们有时候要的不是十进制相等,而是只需要补码相等,可以看到这个时候byte转换为int的时候 其高位 已经被补位1了,这个时候我们&0XFF 其本质原因就是想保持二进制补码的一致性。
      0XFF是16进制 其十进制是255 二进制则是 11111111

    所以涉及到左移右移 其实移动的是补码,对于正数来说 原码,反码,补码都一样(这是规定),对于负数则不一样(符号位不动,反码则是数值取反,补码则是+1)

    左移位:<<,有符号的移位操作 左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充

    右移位:>>,有符号的移位操作 右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。

    加法计算公式为:两个数的补码相加,如果是正,则直接输出,如果是负,则除符号位以外取反加一

    相关文章

      网友评论

          本文标题:&0xFF

          本文链接:https://www.haomeiwen.com/subject/cfhahqtx.html