ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Python简化算法工具——“按位运算”
[打印本页]
作者:
没腿的鸟
时间:
2024-12-10 12:40
标题:
Python简化算法工具——“按位运算”
一、六种常见的“按位运算”
1.与(&)运算
运算规则:对两个整数对应的二进制位进行操作,当两个相应的二进制位都为1时,该位的效果才为1,否则为0。
a=5 #0101
b=7 #0111
print(a&b)
#a&b=0101
#输出对应的十进制数:5
复制代码
2.或(|)运算
运算规则:只要两个相应二进制位中有一个为1,该位的效果就为1。
a=5 #0101
b=7 #011
print(a|b)
#a|b=0111
#输出对应的十进制数:7
复制代码
3.异或(^)运算
运算规则:当两个相应二进制位不同时,该位效果为1;类似时,该位效果为0。
a=5 #0101
b=7 #0111
print(a^b)
#a^b=0010
#输出对应的十进制数:2
复制代码
4.取反(~)运算
运算规则:对一个整数的二进制位进行取反操作,0变为1,1变为0。
tips:不过要注意其在盘算机中的表示是基于补码形式的,好比~5(原码00000101,补码00000101),取反后的补码为11111010,对应的原码为10000110,即十进制的-6。
ps:原码:二进制表示,最高位为符号位,正数的符号位为 0,负数的符号位为 1,别的位表示数值的绝对值。补码:也是一种二进制表示形式,正数的补码和原码类似,负数的补码是其原码除符号位外各位取反,然后在最低位加 1 得到的。
a=5 #八位二进制的原码:0000 0101
print(~a)
#a的补码为原码本身0000 0101
#~a=1111 1010(这是取反后的补码)对应原码为1000 0110 再对应十进制为-6
#输出对应的十进制数:-6
复制代码
5.左移(2)#左移两位:0010#输出对应的十进制数:2[/code]
二、按位运算在算法中的运用思维
1.求最小偶倍数:
通解:辗转相除法
a=5 #0101
print(a<<2)
#左移两位:0001 0100
#输出对应的十进制数:20
复制代码
按位运算:移位、与运算(根据题意,当 n 为奇数时,答案为 2n,当 n 为偶数时,答案为 n。)
b=8 #1000
print(b>>2)
#左移两位:0010
#输出对应的十进制数:2
复制代码
按位运算法:
据此得出
class Solution:
def smallestEvenMultiple(self, n: int) -> int:
a,b=n,2
while b:
a,b=b,a%b
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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4