一、先了解python里十进制转各个进制的写法:
十进制转二进制:bin(10)
,输出:0b1010
是字符串类型, 0b
:表示2进制
十进制转八进制:oct(10)
,输出:0o12
是字符串类型, 0o
:表示8进制
十进制转十六进制:hex(10)
,输出:0xa
是字符串类型, 0x
:表示16进制
二、python位运算符
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与,两个相应位都为1,则该位为1,否则为0 | 4&5=4(0b100&0b101=0b100) |
| | 按位或,只要有一个为1时,结果就为1 | 4|5=5(0b100|0b101=0b101) |
^ | 按位异或,当对应的二进位相异时,结果为1 | 4^5=1(0b100^0b101=0b001) |
~ | 按位取反,即把1变为0,把0变为1,~x相当于-(x+1) | ~4=-5(具体说明在后面) |
<< | 左移,由<<右边的数字指定移动的位数,左移,低位补0 | 4<<2=16(0b100左移2位=0b10000=16) |
>> | 右移,由>>右边的数字指定移动的位数,右移,低位丢弃 | 4>>2(0b100右移2位=0b001=1) |
三、关于取反运算符的说明
二进制数在内存中以补码的形式存储!
- 如果是正数,那么
- 原码 = 反码 = 补码,
- 正数的符号位为0(如
0 100
,这里的0就是符号位);
- 如果是负数,那么
- 反码就是把原码的每一位取反(不包括符号位),也就是0变成1,1变成0;
- 补码就是在反码的基础上,末位+1,
- 负数的符号位为1。
- 例如,~4=-5
- step1、4的原码/反码/补码都为:
0 100
- step2、取反(包括符号位)
1 011
- step3、转为补码,应用负数的规则,
1 011
的反码为1 100
,补码在反码1 100
的末位+1=1 101
- step3、转为十进制为:
-5
- 简单记就是
~x
相当于-(x+1)
- step1、4的原码/反码/补码都为: