1,进制转换问题
1,0b 表示二进制 0 1
2,0o 表示八进制 0 1 2 3 4 5 6 7
3,0x 表示十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f
十进制转为其他进制
num = 100
v1 = bin(num) # 此函数是将十进制转换为二进制
print(type(v1))
print(v1)
运行结果为:
0b1100100
num = 100
v2 = oct(num)# 此函数是将十进制转换为八进制
print(type(v2))
print(v2)
运行结果为:
0o144
num = 100
v3 = hex(num)# 此函数是将十进制转换为十六进制
print(type(v3))
print(v3)
运行结果为:
0x64
其他进制转为十进制
将16进制的字符串转换为十进制
v4 = int("0x64", 16)
print(v4)
结果为:
100
将二进制的字符串转换为十进制
v4 = int("0b1100100", 2)
print(v4)
将8进制的字符串转换为十进制
v4 = int("0o144", 8)
print(v4)
**
2,源码补码反码问题
**
计算机是怎么计算 1 - 1 = 0 的?
实际上计算机的计算方式是 1 + -1 = 0
1的二进制是 0000 0001
-1的二进制是1000 0001 (计算机用最高位表示符号位)
正数情况下:
源码 = 反码 = 补码
负数情况下:
源码 -1 的表示为: 1000 0001
反码 -1 的表示为: 1111 1110 (源码除符号位之外,所有位数取反)
补码 -1 的表示为: 1111 1111 (补码即为 反码加数字1 即 1111 1110 加:0000 0001)
正1的补码为 0000 0001
负1的补码为 1111 1111
二者相加的结果为 1000 0000 符号位的 1 忽略不计
补码转为源码:
补码取反 再加 数字1
-1的补码取反之后为 1000 0000 再加 0000 0001 结果为 1000 0001
**
3,位运算符的使用
**
1, 位运算符 是把数字看做二进制来计算。
2,使用bin()函数可以把数字转换成二进制表示
变量 a 为60,变量b 为13,其二进制的的格式如下
>>> a=60
>>> bin(a)
'0b111100'
>>> b=13
>>> bin(b)
'0b1101'
Windows IDLE环境下示例代码如下:
>>> a=60
>>> b=13
>>> c=(a&b) #60的二进制为 0b111100
>>> bin(c) #13的二进制为 0b1101
'0b1100'
>>> c
12
>>> d=(a|b)#60的二进制为 0b111100
>>> bin(d)#13的二进制为 0b1101
'0b111101'
>>> d
61
>>> e=(a^b)#60的二进制为 0b111100
>>> bin(e)#13的二进制为 0b1101
'0b110001'
>>> e
49
>>> ~a
-61
>>> bin(~a)
'-0b111101'
另外,对同一个数字,异或两次能够得到它本身
a=5
b=10
a=a^b
print(a)
a=a^b
print(a)
运行结果为:
15
5
print(~5) # 对数字5取反之后的运行结果为 -6
5的源码为:0000 0101
取反~ 之后得到的是 补码 1111 1010 第一个数字 1 代表负数
然后再从补码 转换为源码:步骤是对补码取反 再加 数字1
补码取反之后为 1000 0101 再加数字1之后 最后的源码为 1000 0110 即十进制数字为-6
<< 代表左移运算符
>> 代表右移运算符
示例代码如下
a<
>>> a=8
>>> a<<1#代表 a乘以2的一次方
16
>>> a<<2#代表 a乘以2的二次方
32
>>> a<<4#代表 a乘以2的四次方
128
a>>n 即a右移n位 计算公式为 a// 2^n a除以2的n次幂 取整数
>>> a=60
>>> a>>1代表 a除以2的一次方
30
>>> a>>2代表a 除以2的二次方
15
>>> a>>4代表a 除以2的四次方 然后取整数
3
python 二进制正负 python 二进制取反
转载文章标签 python 二进制正负 python二进制反码例题 补码 十进制 进制 文章分类 Python 后端开发
-
MySQL5.7.36安装-二进制(源码)版本
MySQL5.7.36安装-二进制(源码)版本
mysql MySQL sed