您的位置:首页 > 编程语言 > Python开发

python二进制 八进制 十六进制 进制转换问题 源码反码补码的问题 位运算符的使用

2019-06-27 14:04 337 查看
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐