python之位运算
1 不同的进制在python中的表现形式
二进制 0b1
八进制 0o7
十六进制 0x9
2 二进制转换
2.1怎么求负数的二进制表示
典型案例,怎么求出-5的二进制表示?
bin(a
) => -0b101
bin(-a
) => 0b101
1、首先求出
5的二进制位表示
,一个byte由
8个bit位组成
5 => 0000 0101
2、然后取
5的反码,并在末位
+ 1
0000 0101
1111 1010
=> 1111 1011,这就是
-5的二进制表示
2.2 在python中怎么在二进制&十进制之间转换
num
= 32
bina
= bin(num
)
print(bina
)
> 0b100000
intNum
= int(0b100000)
print(intNum
)
> 32
3 八进制
3.1 八进制转十进制
num
= 0o6347
int(0o6347)
> 实际操作是
6*8^3 + 3*8^2 + 4*8^1 + 7*8^0
3.2 八进制转二进制
print(bin(0o6743))
具体怎么实现的呢
6 7 4 3 =>
110 111 100 011
4 十六进制
4.1 十六进制换二进制
十六进制比较特殊,每位可以表示的从(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),其中a = 10 f = 15
print(bin(0x6743))
具体怎么实现的呢?
6 7 4 3 =>
0110 0111 0100 0011
4.2 十六进制转十进制
num
= 0x711
=> 7*16^2 + 1*16^1 + 1*16^0
5 位运算符号
5.1 & 与
print(3 & 2)
具体实现,
1为
True,
0位
False
3 == 0000 0011
2 == 0000 0010
=> 0000 0010 即十进制表示为:
2
5.2 |或
print(3|2)
具体实现,
1为
True,
0位
False
3 == 0000 0011
2 == 0000 0010
=> 0000 0011 即十进制表示为:
3
5.3 ~ 非
print(~3)
具体实现,
1为
True,
0位
False
3 == 0000 0011 =>
1111 1100 末位
-1 => 1111 1011 => 取反码
=> 0000 0100 即十进制:
4
那么原来的肯定是
-4
5.4 ^ 异或
print(3 ^ 2)
具体实现
=>
0000 0011
0000 0010
0000 0001 => 1
5.5 << 左移
print(2 << 1)
具体实现
=>
0000 0010 => 000 0010 => 000 0010 0(补
) => 0000 0100 => 4
5.6 >> 右移
在python中没有无符号右移>>>
print(8 >> 2)
具体实现
=>
0000 1000 => 0000 10 => 补符号位
=> 0 0000 10 => 补符号位
00 0000 10 =>
0000 0010 => 2