验证‘寻找同权重最邻近整数’问题的Python解法是否正确
代码正确性验证
你的实现代码是正确的,下面拆解逻辑并验证核心场景:
代码逻辑拆解
- 步骤1:
k2 = x ^ (x >> 1)
将x与右移一位的自身异或,结果中二进制位为1的位置,对应原数x中相邻两位不同的位置。 - 步骤2:
k2 &= ~(k2 - 1)
提取k2中最右侧的1,这一步的作用是定位原数x中最右边的一对相邻不同位。 - 步骤3:
return x ^ (k2 << 1 | k2)k2 << 1 | k2等价于k2 * 3,即把最右侧的那对相邻位同时置为1;与x异或后,这对相邻位会被翻转(0变1、1变0),实现了相邻不同位的交换——既保证了二进制中1的数量(权重)不变,又因为交换的是最右侧的可调整位,所以得到的y与x的差值最小。
核心测试场景验证
- 测试用例1:x=6(二进制110)
计算后得到y=5(二进制101),权重均为2,差值为1(最小可能)。 - 测试用例2:x=5(二进制101)
计算后得到y=6(二进制110),权重均为2,差值为1(最小可能)。 - 测试用例3:x=7(二进制111)
计算后得到y=11(二进制1011),权重均为3,差值为4,这是比14(差值7)更小的符合要求的数。 - 测试用例4:x=1(二进制01)
计算后得到y=2(二进制10),权重均为1,差值为1(最小可能)。
所有测试场景均符合要求,说明代码逻辑正确。
内容的提问来源于stack exchange,提问作者Ethan Davitt
相关产品推荐
相关产品推荐

