二进制取反

取反,是Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。

概念

编辑

补码的规定如下:

对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。
  对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(00101010按位取反11010101+1即11010110)
  用补码来表示数,0的补码是单一的,都为00000000。(而在原码反码表示中,+0和-0的表示是不单一的,可参见相应的书籍)。而且可以用111111表示-1的补(这也是补码与原码和反码的区别)。

运算方法

编辑

 

正数取反

先将初始数值转换成二进制数,再对二进制数的每一位(包括第一位的符号位)进行运算:即将0变为1、将1变为0。得到的是最终结果的补码,要转换为最终结果的原码则需再次取补码,就能得到计算结果。

【例1】对 5 进行取反。

假设为16位。

5转换为二进制数为: 0000 0000 0000 0101得到二进制数

每一位取反: 1111 1111 1111 1010得到最终结果的补码

取补码: 1000 0000 0000 0110得到最终结果的原码

转换为十进制数:-6

则 5 取反为 -6 .

 

负数取反

先将初始数值转换成二进制数,再取得二进制数的补码,之后对补码的每一位(包括第一位的符号位)进行运算:即将0变为1、将1变为0。得到的是最终结果的补码(到达这一步后所得的二进制数为正数,由于正数的原码、反码、补码相同,后面的运算可以忽略,视此步得到的为最终结果的二进制数),要转换为最终结果的原码则需再次取补码,就能得到计算结果。

【例2】对 -5 进行取反。

假设为16位。

-5 转换为二进制数为: 1000 0000 0000 0101得到二进制数

取补码: 1111 1111 1111 1011得到二进制数的补码

每一位取反: 0000 0000 0000 0100 得到最终结果的补码

取补码: 0000 0000 0000 0100得到最终结果的原码

转换为十进制数:4

则 -5 取反为 4 .

 

简便方法

也可以用适合人类运算的计算方法:

如对 a 按位取反,则得到的结果为 -(a+1) .

此条运算方式对正数负数和零都适用。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值