python:第三十五章:位运算符之按位取反

发布时间 2023-11-21 08:16:24作者: 刘宏缔的架构森林

一,如何得到补码

在计算机中,数字存储时最高位为符号位,
符号位为0时表示正数,符号位为1时表示负数。

数字在计算机中是以补码的形式进行存储的,
整数的补码与原码相同,
负数的补码是在原码的基础上除符号位外,按位取反后,再加1.

+1,原码为0 0001,补码为 0 0001.
-1 ,原码为1 0001,补码为:1 1111。
+2,原码为:0 0010,补码为:0 0010.
-2,原码为:1 0010,补码为:1 1110

例子:-2的原码转为补码:

+2,原码为: 00010
-2 的原码: 10010
除符号位外,按位取反: 11101
+1后: 11110
所以 -2的补码是11110

二,按位取反

10按位取反运算(第1位为符号位):

~ 0  1 0 1 0
 --------------
  1  0 1 0 1

结果最高位为1,为负数,
因为负数在计算机中以补码形式存储,
再转换为原码(先减1,再按位反)为:
补码: 10101
减1后:10100
按位反:  11011 (说明:最高位的符号位不变) 
所以得到原码值为: 1 1011 
即对应的十进制数为 -11,即:~10 = -11

5按位取反运算:(第一位是符号位)

~ 0  0 1 0 1
---------------
  1  1 0 1 0

11010作为负数,
是补码的形式,转为原码:
补码:  11010
减1后:11001
按位取反: 10110 (说明:最高位的符号位不变) 
所以得到原码的值为:10110
对应的十进制数是: -6,即:~5 = -6

说明:刘宏缔的架构森林—专注it技术的博客,
网站:https://blog.imgtouch.com
原文: https://blog.imgtouch.com/index.php/2023/11/18/python-wei-yun-suan-fu-zhi-an-wei-qu-fan/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

三,python的按位到反的例子:

1
2
3
4
5
6
7
8
9
# 按位取反:操作数的二进制位中,每个位都被取反,即0变成1,1变成0
a = 10
b = ~a
print("原值:", a, ";取反后:", b, ";二进制:", bin(b))
 
# 按位取反:操作数的二进制位中,每个位都被取反,即0变成1,1变成0
a = 5
b = ~a
print("原值:", a, ";取反后:", b, ";二进制:", bin(b))

得到结果:

原值: 10 ;取反后: -11 ;二进制: -0b1011
原值: 5 ;取反后: -6 ;二进制: -0b110