python中的按位与 +按位或+ 按位反+异或运算 +左移+右移
1. 按位与
按位与是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位都为 1 则此位为 1,否则为 0。在本例中, 5 的二进制表达为 101 , 3 的二进制表达为 11 (为补全位数进行按位操作写作 011 ),则按位与操作后的结果为001 ,对应的十进制数为 1 。
详细: 3 & 5 —— 00000011 & 00000101 = 0000 0001 即为 1
2. 按位或
按位或是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位有一个为 1 则此位为 1,否则为 0。在本例中, 101 与 011 进行按位或操作后的结果为 111 ,对应十进制数为 7 。
详细:3 | 5 —— 00000011 | 0000 0101 = 0000 0111 即为7
3. 按位异或
按位异或是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位不同则此位为 1,相同为 0。在本例中, 101 与 011 进行按位异或操作的结果为 110 ,对应十进制数为 6 。
详细例子:
a = 10
b = 100
a = a^b # a = 110
b = b^a # b = 10
a = a^b # a = 100
解释:(此处的例子证明a b 经过三次异或操作之后,可以实现两者的数值的交换)
a的二进制 1010 b的二进制 1100100
a : 0 0 0 1 0 1 0
b : 1 1 0 0 1 0 0
a^b: 1 1 0 1 1 1 0 ----> 110 (异或:相等为0,不等为1)
b : 1 1 0 0 1 0 0
b^a: 0 0 0 1 0 1 0 ---->10
a : 1 1 0 1 1 1 0
a^b: 1 1 0 0 1 0 0 ---->100
4. 按位取反
按位取反也称作“按位取非”或“求非”或“取反”,沈洁元译本译作“按位翻转”,是针对二进制数的操作,指将两个二进制数的每一二进位都进行取反操作, 0 换成 1 , 1 换成0 。只需按照给出的公式记忆 ~6 = -(x+1)=-7
详细:~6 = -(x+1)=-7
5. 左移
左移(<<)(由<<右侧的数字决定左移几位,高位丢弃,低位补0)
eg:print(2<<2) 返回8=1000
6. 右移
右移(>>)(由<<右侧的数字决定右移几位,高位丢弃,低位补0)
eg:print(13>>2) 返回3=011