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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值