前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 JAVA位运算总结

原 JAVA位运算总结

作者头像
石奈子
发布2018-06-13 15:26:24
6330
发布2018-06-13 15:26:24
举报

关于二进制

关于二进制的概念,网上已经很多,这里不多赘述,只说关键的属性说明和示例。

维基百科

记住,原码是给人看的,补码才是计算机真正使用的。

我们一般所说的二进制是有32位,首位是符号位。0是正数,1是负数。下面我们来根据例子说明二进制与十进制的转换,以及原码补码反码的概念。

  • 二进制转10 进制(32位太长,我们省略我8位方便演示) 规则:从后往前依次下标为0,1,2..n,如果位是1 则记2的下标次方,有多少个是1的都相加。最后根据符号位标示正负即可。
    • 示例1:0000 0011 的十进制是多少?

    (2的0次方)+(2的1次方)= +3

    • 示例2:1000 0011 的十进制是多少? 补码:1111 1101 -((2的0次方)+(2的1次方))= -3

对于正数来说,原码反码补码都一样。这里主要说的是负数。 以-3为例

  • 原码

1000 0011

  • 反码(原码0->1,1->0,保留符号位)

1111 1100

  • 补码 =反码+1000 00111(逢2进1)

1111 1101

位运算(以补码进行计算)

a=-3,b=2;

位与 & (位同为1,记1,否则记0)

  • 示例 a&b

a补码:1111 1101

b补码:0000 0010

结果: 0000 0000(正数补码反码一样) = 0

位或 | (位只要有1,则记1,否则记0)

  • 示例a|b

a补码:1111 1101

b补码:0000 0010

结果: 1111 1111(补码)

结果反码:1111 1110

结果原码:1000 0001(保留符号位)

结果= -1

位异或 ^ (位不一样则记1,否则记0)

  • 示例 a^b

a补码:1111 1101

b补码:0000 0010

结果: 1111 1111

结果反码:1111 1110(补码-1)

结果原码:1000 0001(保留符号位)

结果 = -1

位取反 ~ (位取反,1>0,0>1)

  • 示例 ~a

a补码:1111 1101

结果: 0000 0010

结果 = 2

左移 << 符号位不变,低位补0 (自右向左低到高)

  • 示例 a<<b

a补码:1111 1101

结果: 1111 0100

结果反码:1111 0011

结果原码:1000 1100(保留符号位)

结果 = -12

右移 >> 低位溢出,符号位不变,并用符号位补溢出的高位

  • 示例 a>>b

a补码:1111 1101

结果: 1111 1111

结果反码:1111 1110

结果原码:1000 0001(保留符号位)

结果 = -1

备注

以上内容在java环境中测试通过。不对之处还望指正。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于二进制
  • 位运算(以补码进行计算)
    • 位与 & (位同为1,记1,否则记0)
      • 位或 | (位只要有1,则记1,否则记0)
        • 位异或 ^ (位不一样则记1,否则记0)
          • 位取反 ~ (位取反,1>0,0>1)
            • 左移 << 符号位不变,低位补0 (自右向左低到高)
              • 右移 >> 低位溢出,符号位不变,并用符号位补溢出的高位
                • 备注
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档