python二进制 八进制 十六进制 进制转换问题 源码反码补码的问题 位运算符的使用
![](https://csdnimg.cn/release/phoenix/images/creativecommons/80x15.png)
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 = 100v1 = bin(num) # 此函数是将十进制转换为二进制 print(type(v1)) print(v1)
运行结果为:
<class 'str'> 0b1100100
num = 100v2 = oct(num) # 此函数是将十进制转换为八进制 print(type(v2)) print(v2)
运行结果为:
<class 'str'> 0o144
num = 100v3 = hex(num) # 此函数是将十进制转换为十六进制 print(type(v3)) print(v3)
运行结果为:
<class 'str'> 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<<n 即a左移n位 计算公式为 a* 2^n a乘以2的n次幂
>>> 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的进制转换二进制,八进制,十六进制及其原理
- 用java语言实现各种进制转换(二进制,八进制,十进制,十六进制互转,主要使用Java Swing技术)
- Python 进制转换 二进制 八进制 十进制 十六进制
- 二进制 十进制 八进制 十六进制 互转 原码、反码、补码、
- 二进制、八进制、十六进制,原码,反码,补码
- 原码、反码、补码什么意思? 二进制、八进制、十六进制的负数表示?
- php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
- C#中二进制、八进制、十六进制和十进制之间的相互转化问题
- delphi 二进制 八进制 十进制 十六进制 进制转换
- 二进制 源码 反码 补码 只需存在 补码
- Python进制转换(二进制、十进制和十六进制)
- Python 之 【二进制、十进制、八进制、十六进制 】之间的转换【转】
- 【Python】Python实现进制转换(二进制、十进制和十六进制)及注意事项
- 进制转换--二进制、八进制、十六进制
- 2016年3月5日 进制转换(二进制、八进制、十进制、十六进制)
- JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
- 2 进制转换 | 二进制、八进制、十进制、十六进制整型常量之间的相互转换
- Python中不同进制互相转换(二进制、八进制、十进制和十六进制)