如何找到与2的幂按位与结果恒为假的数x(排除1)?
找到与任意2的幂按位与结果始终为假的数x
嘿,这个问题其实可以从二进制的本质来拆解,很容易搞明白!先理清楚核心逻辑:
所有2的幂(比如1、2、4、8...)的二进制表示都只有一个位是1,其余全是0。举几个例子:
- 1(2⁰)→
0b1 - 2(2¹)→
0b10 - 4(2²)→
0b100 - 8(2³)→
0b1000
按位与运算(&)的规则是:只有两个对应位都为1时,结果位才是1,否则为0。如果x和任意2的幂按位与的结果始终为假(也就是结果为0,因为JS里0等价于false),那意味着x的二进制里不能有任何一个位是1——只要x有某一位是1,那对应的那个2的幂(刚好在该位为1)和x按位与就会得到非0值,也就是true,直接不符合要求。
所以唯一符合条件的数就是 x = 0。
进阶需求:排除1后的有效x(附代码验证)
其实x=1本身就不满足原条件:1和2⁰(也就是它自己)按位与的结果是1,会返回true,所以它本来就不在符合条件的范围内。不过我们还是用代码来直观验证:
通用验证函数
// 检查x是否满足与任意2的幂按位与结果始终为假 function isValidX(x) { // 遍历32位整数范围内的所有2的幂(足够覆盖常规场景) for (let n = 0; n < 32; n++) { const powerOfTwo = 1 << n; // 等价于计算2^n if (x & powerOfTwo) { console.log(`❌ x = ${x} 与 ${powerOfTwo} 按位与结果为true,不符合条件`); return false; } } console.log(`✅ x = ${x} 完全符合要求!`); return true; } // 测试不同数值 isValidX(0); // ✅ 符合条件 isValidX(1); // ❌ 不符合 isValidX(2); // ❌ 不符合 isValidX(10); // ❌ 不符合
用你提供的代码片段验证x=0
const x = 0; if(x & 2){ console.log("true"); }else { console.log("false"); } // 输出:false
内容的提问来源于stack exchange,提问作者art
相关产品推荐
相关产品推荐

