奇妙数据

python位运算取反操作及原码、补码、反码解析
取反运算是编程中常用的位运算操作python中获取二进制数在python中,使用bin()可以快速获得数值对应的二...
扫描右侧二维码阅读全文
28
2018/10

python位运算取反操作及原码、补码、反码解析

取反运算是编程中常用的位运算操作

python中获取二进制数

  • 在python中,使用bin()可以快速获得数值对应的二进制数
>>> bin(1024)
'0b10000000000' #  输出结果

反码2.jpg

  • 在python中,取反操作符是~
  • 示例
a = 5
print(~a)

反码.png

放到python中运行,输出的结果竟然是-6,这就有点难理解了,十进制数字5按4位二进制数表示为0101,取反后的值是1010,对应的十进制数为10,并不是运算结果-6,那么这是怎么回事呢?在这里就需要复习一些概念,原码、反码、补码。

原码和反码

原码和反码是非常好理解的,比如上面提到的原码0101对应的反码就是1010,按位取反即可

补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
  • 补码的符号
    在补码中,最左侧的数字是符号位,0代表+,1代表-,比如0101对应的数字一定是正数,而1010则是负数
  • 补码的求法
  1. 正整数的补码和原码相同
  2. 负整数的补码,将其对应的正数二进制表示的所有位取反(0变1,1变0,符号位为1不变)后加1。-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)。所以-5的补码是11111011。
  3. 0的补码是唯一的,[+0]补=[+0]反=[+0]原=00000000;[ -0]补=11111111+1=00000000
  • 已知补码求原码
  1. 如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
  2. 如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

比如我们这里最初要解决的问题就变成了,已知一个数x的补码为1010,求这个数。首先符号数为1,表示负数,所以该位不变,其余数值取反,变为--->1101,然后再加1,----> 1110,这里的1110转换为带符号十进制数为-6,也就是我们看到的运算结果了。

总结

计算机中使用补码表示数值,正数的补码是它本身,负数的补码是它对应正数取反后加1,注意符号位保持不变
计算公式:~a = -(a+1)

最后修改:2018 年 10 月 29 日 12 : 06 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论