Python中的进制转换和位运算

2021/7/26 22:06:51

本文主要是介绍Python中的进制转换和位运算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

进制转换

一般我们常见的进制有二进制,八进制,十进制,十六进制

话不多说,先看例子,实践是检验真理的唯一标准!

# 利用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落败,全程看的十分揪心,看完后也有些失落,希望接下来的男单女单不要再出什么意外了,东京奥运会中国队加油!



这篇关于Python中的进制转换和位运算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程