& / ^ ~ << >>
① & 按位与运算符:两个都为1,结果为1,否则为0
② | 按位或运算符:只要有一个为1.结果就 为1
③ ^ 按位异或运算符:当两个二进位相异时,结果为1
④ ~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,0变为1
⑤ << 左移
⑥ >> 右移
& 按位与运算符:
"""
1为真 0为假
0&0 ---> 0
1&1 ---> 1
1&0 ---> 0
0&0 ---> 0
n1 = 0b0110 # 6
n2 = 0b0010 # 2
------------------------
0b0010 ----> 十进制:2
5&9 ---> 1
0101
1001
------------------------
0001 ---> 1
"""
n1 = 0b0110 # 6
n2 = 0b0010 # 2
print(n1 & n2) # 2
print(5&9) # 1
^ 按位异或运算符:
"""
^ 异或:上下两个二进位相异时,结果为1,相同为0
"""
print(n1 ^ n2) # 2
print(5^9) # 12
~ 按位取反运算符:
明确:
1.已知十进制负数,求二进制负数:
①正数的原码 ②原码取反 ③加1 -----> 得到的二进制就是负数的二进制
-7的进制
①正数的原码 0000 0111
②原码取反 1111 1000
③加1 1111 1001(-7的二进制)
2.已知二进制负数,求对应的十进制:
(判断是否是负的二进制的依据,看二进制的最高位:1111 1010,最高位是1则为负数,0则为正数)
①负的二进制 ②二进制减1 ③取反 ④原码 ⑤将原码转成十进制,在十进制前面添加负号:-
1111 1010的十进制
①负的二进制 1111 1010
②二进制减1 1111 1001
③取反 0000 0110
④原码 0000 0110 ---> 6
⑤将原码转成十进制,在十进制前面添加负号:- ---> -6
例题:
n1 = 0b0110
print(~n1) # 0000 0110 ---> 1111 1001 ---> 1111 1000 --->0000 0111 ---> -7
print(~5) # 0000 0101 ---> 1111 1010 ---> 1111 1001 --->0000 0110 ---> -6
练习题:
1.~7 —> 打印出来的十进制是多少?
2.-9的二进制表示。
3.~-4,打印出来的十进制是多少?
4.1111 1101的十进制表示。
1.~7 ---> 打印出来的十进制是多少?
0000 0111 ---> 1111 1000 ---> 1111 0111 ---> 0000 1000 ---> -8
2.-9的二进制表示。
0000 1001 --->1111 0110 --->1111 0111
3.~-4,打印出来的十进制是多少?
0000 0100 --->1111 1011 --->1111 1100 ---> 0000 0011 ---> 3
4.1111 1101的十进制表示。
1111 1101 ---> 1111 1100 ---> 0000 0011 ----> -3
<< 左移
>> 右移
n = 12 # 00001100
print(n << 1) # 24 12 * 2
print(n << 2) # 48 12 * 2 * 2
print(n << 3) # 96 12 * 2 * 2 * 2
n = 12 # 00001100
print(n >> 1) # 6 12 // 2
print(n >> 2) # 3 12 //( 2 * 2 )
print(n >> 3) # 1 12 //( 2 * 2 * 2 )