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
相关产品推荐
相关产品推荐

