python:第三十五章:位运算符之按位取反
一,如何得到补码
在计算机中,数字存储时最高位为符号位,
符号位为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