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

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

你可能感兴趣的:(python中换位取反运算符【~】中具体的运算详解)