1.十进制整数的反码
每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。
二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。
给你一个十进制数 N,请你返回其二进制表示的反码所对应的十进制整数。
方法一:位运算
#方法一:位运算
def bitwiseComplement(n):
tem=2
c=n
while c>1:
c>>=1
tem<<=1 #找到最高二进制位1的位置
return n^(tem-1) #异或运算,相同为0,相异为1,全为1的数进行异或
2.将数字变成 0 的操作次数
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
方法一:位运算
#方法一:位运算
def numberOfSteps(num):
res=0
while num:
res+=(num&1)+(num>1) #判断最右边是不是1和num是不是大于1,为1进行两步操作
num>>=1
return res
3.根据数字二进制下 1 的数目排序
给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。
请你返回排序后的数组。
方法一:排序+位运算
#方法一:排序+位运算
def sortByBits(arr):
def count1(n):
res=0
while n :
res+=n&1
n>>=1
return res #计算1的个数
return sorted(arr,key=lambda x: (count1(x),x))