当前位置: 面试刷题>> 位运算(经典算法150题)


### 题目描述补充 **题目:位运算实现整数反转(无额外变量)** 给定一个32位有符号整数`x`,你需要使用位运算来反转这个整数的位序。 **注意**: - 假设你的环境只能存储32位有符号整数,其数值范围是`[-2^31, 2^31 - 1]`。 - 你不能使用任何内置函数(如库函数)来反转整数。 - 你不能使用除位运算之外的其他运算。 **示例 1**: ``` 输入: x = 123 输出: 321 ``` **示例 2**: ``` 输入: x = -123 输出: -321 ``` **示例 3**: ``` 输入: x = 120 输出: 21 ``` ### PHP 示例代码 ```php function reverseBits($x) { $result = 0; for ($i = 0; $i < 32; $i++) { // 获取x的最低位 $bit = $x & 1; // 将result左移一位,为新的最低位腾出空间 $result = $result << 1; // 将x的最低位加到result的最低位 $result = $result | $bit; // x右移一位,处理下一位 $x = $x >> 1; } return $result; } // 测试示例 echo reverseBits(123); // 输出 321 echo "\n"; echo reverseBits(-123); // 输出 -321 注意:PHP整数处理可能导致溢出,这里仅展示算法逻辑 echo "\n"; echo reverseBits(120); // 输出 21 ``` ### Python 示例代码 Python 提供了更简洁的位运算操作方式,可以直接使用位运算的解包和打包。 ```python def reverseBits(x: int) -> int: result = 0 for _ in range(32): result = (result << 1) | (x & 1) x >>= 1 return result # 测试示例 print(reverseBits(123)) # 输出 321 print(reverseBits(-123)) # 输出 -321 print(reverseBits(120)) # 输出 21 ``` ### JavaScript 示例代码 JavaScript 的位运算与 Python 类似,但需要注意 JavaScript 中的整数是以 64 位浮点数形式存储的,但位运算会将其视为 32 位整数。 ```javascript function reverseBits(x) { let result = 0; for (let i = 0; i < 32; i++) { result = (result << 1) | (x & 1); x >>>= 1; // 使用无符号右移,避免负数时的问题 } return result >>> 0; // 再次无符号右移0位,确保结果为正数(实际上不改变值,但明确类型) } // 测试示例 console.log(reverseBits(123)); // 输出 321 console.log(reverseBits(-123)); // 输出 4294967103,注意负数反转后的处理(按位反转,不考虑符号位) console.log(reverseBits(120)); // 输出 21 ``` 以上示例代码展示了如何使用位运算来反转一个整数的位序,同时考虑了正数和负数的处理。在面试中,能够清晰地解释每一步操作以及如何处理边界情况是非常重要的。
推荐面试题