python中换位取反运算符【~】中具体的运算详解

计算机中的数值是以二进制码的方式存储的,而且是以补码的方式存储的。数值的运算也是以补码的形式进行运算
而我们通常看到的数值一般是十进制数,可以简单地理解为计算机将补码转换成原码,然后再将原码转换成十进制显示出来
我们知道如下规定:

正数的原码和补码都是其本身
负数的补码是其正数的原码各位取反,最后再加上1(符号位不变,数值位取反,最后一位加1)
负数的补码的补码就是其原码

公式:
  ~b =  -(b+1)

下面举例进行说明

在python的中输入
>>~8
该语句对8进行按位取反
注:下面括号中的0和1代表符号位,0为正,1为负,中括号代表类型
8的原码为(0) 1000 [原]
根据上述规定1:8的补码等于原码,所以8的补码为(0) 1000 [补]
对该补码进行按位取反运算 ‘~’ 得到 (1) 0111 [补] 结果是一个负数的补码
接着我们要把它变成原码,根据规定3和规定2,对结果再取一次补就能得到原码
(1) 0111 [补] –数值位取反–> (1) 1000 –最后一位加1–> (1) 1001 [原]
得 (1) 1001 [原] 再转换成十进制显示就是 -9
那要是对负数取反呢?如输入:
>>~(-8)
该语句对-8进行按位取反
-8的原码为 (1) 1000 [原]
根据规定2有:
(1) 1000 [原] –数值位取反–> (1) 0111 –最后一位加1–> (1) 1000 [补],
其补码为 (1) 1000 [补]
补码进行按位取反运算 ‘~’ 的结果是 (0) 0111 [补] 这是一个正数的补码,
而根据规定1,其原码和补码一样,为(0) 0111 [原] 再转换成十进制就是 7

————————————————

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值