
?
进制转换
一般我们常见的进制有二进制,八进制,十进制,十六进制
话不多说,先看例子,实践是检验真理的唯一标准!
# 利用Python进行数据间的转换
'''
输出值看前缀:
0b 二进制
0o 八进制
0x 十六进制
默认 十进制
'''
a = 149
print(bin(a)) # binary 转二进制 (无论当前参数是几进制的)
print(oct(a)) # 转八进制
print(hex(a)) # 转十六进制
其输出结果分别为:
二进制? ? ? ? ??0b10010101
八进制? ? ? ? ??0o225
十六进制? ? ??0x95
需注意求进制时使用的函数依次为:bin(),oct(),hex()。另外,浮点型数据无法转进制。
下面再看一下,其他进制转十进制的例子。

?给n赋值为? ?0x558? ,使用type函数可知其数据类型还是整型,不受进制影响。
由于在Python中bin(),求不出负数的二进制码,下面教大家手动计算。
已知正整数5,求其对应的负数的二进制码?
答:先写出5的二进制码,0101,取反-->1 1010,加一,结果为? ?1 1011? (第一个1是符号位)
位运算
先看一下几个常见位运算的运算符:
&? ? ? ? ? 与运算
|? ? ? ? ? ?或运算
^? ? ? ? ? 异或运算
~? ? ? ? ? 取反运算
<<? ? ? ? 左移运算
>>? ? ? ? 右移运算
我们设n1=0b0110,n2=0b0010
n1 & n2? ? ? 计算时,相当于对其二进制各位进行与运算,结果为:0b0010
0 & 0? =0
0 & 1 = 0
1 &?1 = 1
n1 | n2? ? ? 计算时,相当于对其二进制各位进行或运算,结果为:0b0110
0 |?0? = 0
0 |?1 = 1
1 |?1 = 1
n1 ^?n2? ? ? 计算时,相当于对其二进制各位进行异或运算,结果为:0b0100
0 ^?0? = 0
0 ^?1 = 1
1 ^?1 = 0
以上三个位运算符在使用时,是两个数据的运算。当其数据类型为十进制整型时,需转化为二进制数据进行计算。
而取反,左移和右移的运算符只涉及到了一个数据的变换。
对于下面的三个取反计算,我们逐一进行讨论。
print(~n1) # 对n1进行取反 得1 1001,第一个为符号位 说明为负数;已知二进制负数,求十进制负数
print(~7)
print(~-4)
(1.)? ? ? ? ?n1 = 0b0110 ,取反即为 各位 0 转1 ,1 转 0? ? ? ? ? ?结果为 1 1001? ?
故若已知负数的二进制,要求十进制时。保留符号位为负数,再将后面的二进制,减一,取反,得十进制,带上符号位为负数
得:-7
(2.)? ? ? ?整数7 转为二进制 ,0111,取反--->1 1000,负数,输出结果应为十进制。
? ? ?故按上题的计算方法,先减一,?0111,取反,1000
得:-8
(3.) 整数-4转为二进制,?即求4的补码(因为正数的补码就是负数的二进制表示)
4的原码? ? ?0 0100
4的反码? ? ?1 1011
4的补码? ? ?1 1100(此为-4的二进制表示)
取反符号 进行取反? ? ?0 0011
正数,直接出结果 3
总结:当取反后为正数时,直接输出十进制形式;
? ? ? ? ? ?当取反后为负数时,需进行? ?负数的二进制转十进制的运算 (根据上文中的方法可计算)
左移和右移
关于这两个运算符,较为简单,话不多讲,看素材。

n = 12?
<<? 箭头向左,故为左移
n << 1是将12的二进制代码左移一个单位,即 1100 左移后 11000 ,结果为24(也可理解为n * 2)
>>? 箭头向右,故为右移
n >>?1 是将12的二进制代码右移一个单位,即 1100 左移后 0110 ,结果为?6(也可理解为n /?2)
题外话:刚刚看了东京奥运会混双决赛,我们的昕雯组合不敌日本队,3:4落败,全程看的十分揪心,看完后也有些失落,希望接下来的男单女单不要再出什么意外了,东京奥运会中国队加油!
|