Python的按位取反操作符(~)在计算机中的计算过程

Python的按位取反操作符(~)在计算机中的计算过程

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

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

下面举例进行说明

  • 在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值