You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找到与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:59:09