找到具有相同权重的最接近的整数

问题描述 投票:0回答:1

我正在努力解决这个问题:

编写一个程序,以非负整数 x 作为输入,返回一个不等于 x 的数字 y,但与 x 具有相同的权重(设置为 1 的位数相同),并且它们的差异尽可能小。

这是我的解决方案:

def closest_int_same_bit_count(x):
    k2 = (x^(x >> 1))
    k2 &= ~(k2-1)
    return x^(k2 << 1 | k2)

我知道还有其他帖子有类似的问题,我只是想知道这个解决方案是否正确。

python bit-manipulation
1个回答
0
投票

这是正确的,但还有一个更简单的选择:

def closest_int_same_bit_count(x):
    y = -x & (x + 1)
    return x ^ (y | (y >> 1))
© www.soinside.com 2019 - 2024. All rights reserved.