进制转换与位运算

学习位运算要先了解进制转换,进制转换如下

二进制转十进制

二进制以以0b开头

二进制1101转成十进制

1  1  0  1  

1*23+1*22+ 0*21+1*20=13

有0的位置可以不用看,上述可直接写成23+22+20=13

#bin()是十进制转二进制的函数,0b代表二进制 
a = 3
print(bin(a)) #输出为0b11

a = 13
print(bin(a)) #输出为0b1101

#二进制转十进制使用int()函数
b = 0b10111
print(int(b)) #输出为23

 

十进制转二进制

.. 28  27  26  25  24  23  22  21  20  

  256    128    64      32      16       8        4        2        1

例如:324的二进制位

324包括28 26 22

其他位补0

所以324的二进制为101000100

 

负数的二进制

负数有一个符号位,即第一位是1

先求它正数的二进制,然后再取反,末位加1

注意:8个二进制位即bit构成1个字节byte

例如:-5的二进制为

5的二进制是0000 0101
取反为1111 1010
末位加上1
最终-5的二进制为1111 1011

 

-8的二进制

8的二进制就是0000 1000
取反1111 0111
末位加1,进位
最终-8的二进制为1111 1000

 

八进制转十进制

八进制以0o开头

八进制:逢8进1,各个位上的数字不能大于8。

例如:0o6430的十进制为

 6    4         3    0

6*83 + 4*82 + 3*81 + 0*80 =3352

a = 0o6430
print(int(a)) #输出为3352

 

八进制转二进制

三个数为一组

6  4  3  0   #找到各个数值对应的二进制

110   100   011   000

所以0o6430二进制为110100011000

 

十六进制转十进制

十六进制以0x开头

0x911转十进制

9  1  1

9*162+1*161+1*160 =2321

 

十六进制转二进制

四个数一组

9  a  b  1  6

1001 1010 1011 0001 0110

所以0x9ab16的二进制为1001 1010 1011 0001 0110

 

位运算符

python中位运算符包括

& #位与
| #位或
^ #位异
~ #取反
<< #左移位
>> #右移位

 

位与运算

两个操作数据使用二进制表示,只有对应位都是1时,结果才是1,否则为0。

3&2

print(3&2)
'''
3的二进制为0000 0011
2的二进制为0000 0010
做与运算为 0000 0010
所以结果为2
'''

 

位或运算

两个操作数据使用二进制表示,只有对应位都是0时,结果才是0,否则为1。

5|3

print(5|3)
'''
5的二进制为0000 0101
3的二进制为0000 0011
做或运算为 0000 0111
所以结果为7
'''

 

位取反运算

也叫位非运算,也就是取反,1取0,0取1。

~5

print(~5)
'''
5的二进制为0000 0101
取反      1111 1010
此时第一位是1,是负数,开始进行负数的十进制运算
末位减1,就会得到1111 1001
在对它进行取反操作得到0000 0110
最后得到6,因为是负数所以要加上负号,即-6
'''

 

位异或运算

当两个二进制表示的操作数,两个数相同,同时为0或者1时,结果为0,否则为1。

^异或

print(3^5)
'''
3的二进制为0000 0011
5的二进制为0000 0101
结果为    0000 0110
6
'''

 

左移位运算

是将一个二进制操作数向左边移动指定的位数,左边溢出的位被丢弃,右边空出的位补0。

左移运算相当于操作数乘以2的n次幂。

<<

print(2<<1)
'''
2的二进制为0000 0010
左移一位为0000 0100
结果为4
'''

即2*21=4

 

右移位运算

是将一个二进制操作数向右边移动指定的位数,右边溢出的位被丢弃,如果是正数,左边空出的位补0,如果是负数,左边空出的位补1。

右移运算相当于操作数除以2的n次幂

>>右移

print(2>>1)
'''
2的二进制为0000 0010
右移一位为0000 0001
结果为1
'''

2/21=1(如果有小数直接去掉只取整数)

 

学习来自:B站大学 P24-26

《python从入门到项目实践》明日科技 第五章

posted @ 2020-10-28 17:39  努力吧阿团  阅读(729)  评论(0编辑  收藏  举报