当前位置: 面试刷题>> 位运算(经典算法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
```
以上示例代码展示了如何使用位运算来反转一个整数的位序,同时考虑了正数和负数的处理。在面试中,能够清晰地解释每一步操作以及如何处理边界情况是非常重要的。