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,否则为0a & b = 0000 1100 = 12
|或:参与运算的两个值,如果两个对应位有一个为1,则该位的结果为1,否则为0a | b = 0011 1101 = 61
^异或:参与运算的两个值,如果两个对应位不一致,则该位的结果为1,否则为0a ^ b = 0011 0001 = 49
~取反:对参与运算的这个值的每个位都取相反数,即1变为0,0变为1,~x 相当于 -x-1~a = 1100 0011 = -61,有符号位的补码(稍后说明二进制的负数表示方式)
<<左移动:对参与运算的这个值的每个位都左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0a << 2 = 1111 0000 = 240
>>右移动:对参与运算的这个值的每个位都右移若干位,由“<<”右边的数指定移动的位数,低位丢弃,高位补0a >> 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 的二进制表示。

以上就是关于位运算符的简单介绍,之后会记录一下,二进制的负数的表示和如何更好的理解,谢谢。

转载请注明出处,万分感谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hbblzjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值