Python基础入门之位运算符
Posted hbblzjy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础入门之位运算符相关的知识,希望对你有一定的参考价值。
位运算符是将数字转换成二进制的形式,然后进行计算。
例如:a = 60,b = 13,
a & b = 12,这是因为a、b转换成二进制为
a = 0011 1100,
b = 0000 1101,
a & b = 0000 1100 = 12,
位运算符包含以下几种:
位运算符 | 含义 | 实例:a = 60 = 0011 1100, b = 13 = 0000 1101 |
---|---|---|
& | 与:参与运算的两个值,如果两个对应位都为1,则该位的结果为1,否则为0 | a & b = 0000 1100 = 12 |
| | 或:参与运算的两个值,如果两个对应位有一个为1,则该位的结果为1,否则为0 | a | b = 0011 1101 = 61 |
^ | 异或:参与运算的两个值,如果两个对应位不一致,则该位的结果为1,否则为0 | a ^ b = 0011 0001 = 49 |
~ | 取反:对参与运算的这个值的每个位都取相反数,即1变为0,0变为1,~x 相当于 -x-1 | ~a = 1100 0011 = -61,有符号位的补码(稍后说明二进制的负数表示方式) |
<< | 左移动:对参与运算的这个值的每个位都左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0 | a << 2 = 1111 0000 = 240 |
>> | 右移动:对参与运算的这个值的每个位都右移若干位,由“<<”右边的数指定移动的位数,低位丢弃,高位补0 | a >> 2 = 0000 1111 = 15 |
了解了位运算符的含义,现在开始做道练习题。
例题一:输入非空的两个二进制字符串,只包含0和1,返回两个数的和(1、用二进制表示结果;2、输入的值除‘0’外,都为非‘0’开始的二进制)
解析:我们可以设计这样的算法来计算:
把 a 和 b 转换成整型数字 c 和 d,在接下来的过程中,c 保存结果,d 保存进位。
当进位不为 0 时:
1、计算当前 c 和 d 的无进位相加结果:result = c ^ d;
2、计算当前 c 和 d 的进位:jin = (c & d) << 1;
3、完成本次循环,更新 c = result,d = jin;
当进位为0时,返回 c 的二进制形式;
为什么这个方法是可行的呢?在第一轮计算中,result 的最后一位是 c 和 d 相加之后的结果,jin 的倒数第二位是 c 和 d 最后一位相加的进位。接着每一轮中,由于 jin 是由 c 和 d “按位与”并且“左移”得到的,那么最后会补零,所以在下面计算的过程中后面的数位不受影响,而每一轮都可以得到一个低 i 位的答案和它向低 i+1 位的进位,也就模拟了加法的过程。
代码如下:
def addBinary(self, a: str, b: str) -> str:
c = int(a, 2)
d = int(b, 2)
while d:
result = c ^ d
jin = (c & d) << 1
c = result
d = jin
return bin(c)[2:] # bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
以上就是关于位运算符的简单介绍,之后会记录一下,二进制的负数的表示和如何更好的理解,谢谢。
转载请注明出处,万分感谢!
以上是关于Python基础入门之位运算符的主要内容,如果未能解决你的问题,请参考以下文章