Java---“按位操作符”(重点是“~”)

  • 在这里先补充原码、补码、反码的一点知识:
    1. 正数的反码、补码都与原码一样
    2. 负数的反码、补码与原码不同。
                          反码:原码中除去符号位,其他数值位取反
                          补码:反码+1
     
Demo
7
-7
原码
00000111
10000111
反码
00000111
11111000
补码
00000111
11111001
 
  • 按位操作符包括:
    1. 按位“与“---&    如果两个输入位都是1,则会生成一个输出位1,否则生成一个输出位0。 :00000101 & 00000011 会得到 00000001
    2. 按位“或”---|      如果两个输入位里只要有一个是1,就会生成一个输出位1,只有在两个输出位都是0时,才会生成一个输出位0。   :00000101 | 00000011 会得到 00000111
    3. 按位“亦或”---^  如果输入位里有一个是1,但不全都是1,那么生成一个输出位1。       :00000101 & 00000011 会得到 00000110
    4. 按位“非”--- ~   (一元操作符)     --->>>这个是重点,我也是搞了半天才搞清楚,这个要用到原码、反码、补码的知识了
                    
                    对于负数而言,比如想得到“~(-5)”的结果:
      1. 原码:       1(符号位) 0000101
      2. 取反码:    1(符号位) 1111010
      3. 取补码:    1(符号位) 1111011
      4. ~操作:     0(符号位) 0000100    【这里是全部取反而不是取反码】
      5. 结果: 4
                    
                    对于正数而言,比如想得到“~5”的结果:
      1. 原码:      0(符号位) 0000101
      2. 取反码:   0(符号位) 0000101
      3. 取补码:   0(符号位) 0000101
      4. ~操作:    1(符号位) 1111010      【同上】
      5. 取反码:   1(符号位) 0000101
      6. +1:        1(符号位) 0000110
      7. 结果: -6
 
                    结论:这个过程很容易就搞乱了,最终参考了各位大牛的一个口诀:不论正数负数,进行按位“非”操作的结果都是:   -(数值+1)
 
 
 
          
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值