问题对于64或者32位无符号整数x,如0b111权值为3,找到一个权值一样,但是两数相减绝对值最小的数。
通过几个小样例测试发现规律,当两数的二进制位相邻值不同时,交换两数位置,即可以得到最近值
def closestWithTheSameWeight(x):
for i range(0,64):
if ((x >> i) & 1 )^ ((x >> i+1) & 1)):
x ^= (1 << i) | (1 << (i=1))
return
问题对于64或者32位无符号整数x,如0b111权值为3,找到一个权值一样,但是两数相减绝对值最小的数。
通过几个小样例测试发现规律,当两数的二进制位相邻值不同时,交换两数位置,即可以得到最近值
def closestWithTheSameWeight(x):
for i range(0,64):
if ((x >> i) & 1 )^ ((x >> i+1) & 1)):
x ^= (1 << i) | (1 << (i=1))
return