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

C函数firstBitEqualsLast实现问题:判断第0位与第31位是否相等

问题分析与代码修正

你的代码问题在于返回值不符合要求:当第0位和第31位相等时,lhs ^ rhs的结果是0,~0在32位有符号int中是0xFFFFFFFF(即-1),但题目要求返回1而非-1;当两位不等时,~(lhs ^ rhs)会得到0,这部分逻辑正确,但相等时的返回值错误。

修正方案1(基于你的原逻辑修改)

把按位取反改成逻辑取反,利用!运算符将非0值转为0、0转为1,适配题目要求的返回值:

int firstBitEqualsLast(int x) {
    int lhs = ((x << 31) >> 31);
    int rhs = (x >> 31);
    return !(lhs ^ rhs);
}

修正方案2(更直观的位提取方式)

直接提取第0位和第31位进行比较,逻辑更清晰:

int firstBitEqualsLast(int x) {
    int bit0 = x & 1;          // 提取整数x的第0位
    int bit31 = (x >> 31) & 1; // 提取第31位(符号扩展后取最低位)
    return !(bit0 ^ bit31);    // 两位相等则异或结果为0,!0返回1;否则返回0
}

修正方案3(极简写法)

省略中间变量,一行完成逻辑:

int firstBitEqualsLast(int x) {
    return !((x & 1) ^ ((x >> 31) & 1));
}

以上三种方案都符合题目对运算符的限制,能正确返回1或0。

内容的提问来源于stack exchange,提问作者Muhammad Hamza Maqsood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:01:03