python 位运算

正数的源码与补码、反码一致;负数的反码是将其源码除符号位之外的各位求反,负数的补码是将其源码出符号位之外的各位求反后再加1

总结所有来说,就是进行运算的时候是各个数的补码,最后得出来的也是结果的补码。

按位运算就把数字转换为机器语言——二进制的数字来运算的一种运算形式在计算机系统中,数值一律用补码来表示(存储)。

按位与    &

eg:3&5

正数补码与源码一致,

3的补码为 11

5的补码为101

按位与之后的结果为001,结果为1

a = 3
b = 5
print bin(3)
print bin(5)
print 3&5
print bin(3&5)
>>0b11
>>0b101
>>1
>>0b1

eg:-1&-2

负数补码为源码除符号位取反后再加1

-1源码为1000 0001

-1反码为1111 1110

-1补码为1111 1111

-2源码为1000 0010

-2反码为1111 1101

-2补码为1111 1110

(1111 1111)&(1111 1110)=(1111 1110)

结果为-2

a = -1
b = -2
print bin(a)
print bin(b)
print a&b
print bin(a&b)
>>-0b1
>>-0b10
>>-2
>>-0b10

eg:-2&6

-2补码为1111 1110

6源码/补码为0000 0110

(1111 1110)&(0000 0110)=(0000 0110)

正数补码即为源码,最后结果为6

a = -2
b = 6
print bin(a)
print bin(b)
print a&b
print bin(a&b)
>>-0b10
>>0b110
>>6
>>0b110

按位并    |

eg:4|7

4补码为0000 0010

7补码为0000 0111

结果为0000 0111

正数补码即源码,结果为7

a = 4
b = 7
print bin(a)
print bin(b)
print a&b
print bin(a&b)
>>0b10
>>0b111
>>7
>>0b111

按位异或    ^

eg:-3^2

-3源码为1000 0011

-3反码为1111 1100

-3补码为1111 1101

2补码为0000 0010

结果为1111 1111

还原为反码为1111 1110

还原为源码为1000 0001

即结果为十进制-1

按位翻转  ~   

最快捷的做法是~x = -x-1

eg:~3

3的补码为0000 0011

翻转为 1111 1100

还原为反码为 1111 1011

还原为源码为 1000 0100

即结果为十进制-4

eg:~-2

-2源码为 1000 0010

-2反码为 1111 1101

-2补码为 1111 1110

~~2为0000 0001

即结果为十进制1



猜你喜欢

转载自blog.csdn.net/u014381464/article/details/80776781