python二进制数加1_Python二进制中1的个数

本文介绍了一种Python算法,用于计算整数的二进制表示中1的个数,通过位操作技巧高效地判断一个数是否为2的幂,并演示如何计算两个数异或操作导致的二进制位变化。特别关注了负数的补码表示和Python中的整数溢出问题。
摘要由CSDN通过智能技术生成

注意到每个非零整数n和n-1进行按位与运算,整数n的二进制数中最右边的1就会变成0,那么二进制数中的1的个数就会减少一个,因此可以利用一个循环,使得 n = n&(n-1) ,计算经过几次运算减少到0,就是有几个1。注意:书中给了另外两种方法,分别是原始n左移一位和右移一位的方法,因为Python不会出现整数溢出的情况,这里就不再考虑着两种方法。扩展:判断一个数值是不是2得整数次方,如果是的话,这个数的二进制数中有且只有一个1,那么这个数n会有 n&(n-1) == 0。或者求两个整数m和n需要改变m二进制中的多少位才能得到n,可以先做 m^n 的异或运算,然后求这个数中有多少个1。'''

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

'''

class Solution:

def NumberOf1(self, n):

count = 0

if n < 0:

n = n & 0xffffffff

while n:

count += 1

n = (n-1)&n

return count

def NumberOf2(self, n):

if n < 0:

s = bin(n & 0xffffffff)

else:

s = bin(n)

return s.count('1')

# 判断一个数是不是2得整数次幂

def powerOf2(self, n):

if n&(n-1) == 0:

return True

else:

return False

# 判断两个数的二进制表示有多少位不一样, 直接比较两个数的二进制异或就可以

def andOr(self, m, n):

diff = m^n

count = 0

while diff:

count += 1

diff = diff&(diff-1)

return count

S = Solution()

print(S.NumberOf1(-1))

print(S.NumberOf2(-1))

print(S.powerOf2(64))

print(S.powerOf2(63))

print(S.andOr(10, 13))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值