Python简化算法工具——“按位运算”

打印 上一主题 下一主题

主题 863|帖子 863|积分 2589

一、六种常见的“按位运算”

1.与(&)运算

运算规则:对两个整数对应的二进制位进行操作,当两个相应的二进制位都为1时,该位的效果才为1,否则为0。
  1. a=5  #0101
  2. b=7  #0111
  3. print(a&b)
  4. #a&b=0101
  5. #输出对应的十进制数:5
复制代码
2.或(|)运算

运算规则:只要两个相应二进制位中有一个为1,该位的效果就为1。
  1. a=5  #0101
  2. b=7  #011
  3. print(a|b)
  4. #a|b=0111
  5. #输出对应的十进制数:7
复制代码
3.异或(^)运算

运算规则:当两个相应二进制位不同时,该位效果为1;类似时,该位效果为0。
  1. a=5  #0101
  2. b=7  #0111
  3. print(a^b)
  4. #a^b=0010
  5. #输出对应的十进制数:2
复制代码
4.取反(~)运算

运算规则:对一个整数的二进制位进行取反操作,0变为1,1变为0。
tips:不过要注意其在盘算机中的表示是基于补码形式的,好比~5(原码00000101,补码00000101),取反后的补码为11111010,对应的原码为10000110,即十进制的-6。
ps:原码:二进制表示,最高位为符号位,正数的符号位为 0,负数的符号位为 1,别的位表示数值的绝对值。补码:也是一种二进制表示形式,正数的补码和原码类似,负数的补码是其原码除符号位外各位取反,然后在最低位加 1 得到的。
  1. a=5  #八位二进制的原码:0000 0101
  2. print(~a)
  3. #a的补码为原码本身0000 0101
  4. #~a=1111 1010(这是取反后的补码)对应原码为1000 0110 再对应十进制为-6
  5. #输出对应的十进制数:-6
复制代码
5.左移(2)#左移两位:0010#输出对应的十进制数:2[/code]二、按位运算在算法中的运用思维

1.求最小偶倍数:


通解:辗转相除法
  1. a=5  #0101
  2. print(a<<2)
  3. #左移两位:0001 0100
  4. #输出对应的十进制数:20
复制代码
按位运算:移位、与运算(根据题意,当 n 为奇数时,答案为 2n,当 n 为偶数时,答案为 n。)
  1. b=8  #1000
  2. print(b>>2)
  3. #左移两位:0010
  4. #输出对应的十进制数:2
复制代码
按位运算法:

据此得出
  1. class Solution:
  2.     def smallestEvenMultiple(self, n: int) -> int:
  3.         a,b=n,2
  4.         while b:
  5.             a,b=b,a%b
  6.         return 2*n//a
复制代码
【该题题解思路来源】:
作者:Krahets
链接:https://leetcode.cn/problems/power-of-two/solutions/12689/power-of-two-er-jin-zhi-ji-jian-by-jyd/

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表