当前位置: 面试刷题>> 交换奇偶二进制位 (经典算法题500道)
### 题目描述补充
题目:交换奇偶二进制位
给定一个非负整数 `n`,请编写一个函数来交换其二进制表示中的奇数位(从右向左数,第1位是奇数位)和偶数位(从右向左数,第0位是偶数位),然后返回交换后的结果。
**注意**:
- 输入的数字 `n` 是一个非负整数。
- 你的函数应当返回交换后的整数,而不是以字符串或其他形式。
### 示例
**输入**:`n = 2`
**二进制表示**:`10`
**交换后的二进制表示**:`01`
**输出**:`1`
**输入**:`n = 4`
**二进制表示**:`100`
**交换后的二进制表示**:`001`
**输出**:`1`
**输入**:`n = 12`
**二进制表示**:`1100`
**交换后的二进制表示**:`0110`
**输出**:`6`
### PHP 代码示例
```php
function swapOddEvenBits($n) {
$result = 0;
$bitIndex = 0;
while ($n > 0) {
$bit = $n & 1; // 获取最低位
if ($bitIndex % 2 == 0) {
// 偶数位,直接添加到结果
$result = ($result << 1) + $bit;
} else {
// 奇数位,先左移一位(相当于乘以2)然后添加到结果的最高位
$result = ($result << 1) + ($bit << 1);
}
$n = $n >> 1; // 右移一位,处理下一位
$bitIndex++;
}
// 如果n的位数是奇数,则最高位(奇数位)需要补充0
if ($bitIndex % 2 != 0) {
$result = $result << 1;
}
return $result;
}
// 测试
echo swapOddEvenBits(2); // 输出 1
echo swapOddEvenBits(4); // 输出 1
echo swapOddEvenBits(12); // 输出 6
```
### Python 代码示例
```python
def swapOddEvenBits(n):
result = 0
bit_index = 0
while n:
bit = n & 1 # 获取最低位
if bit_index % 2 == 0:
result = (result << 1) + bit
else:
result = (result << 1) + (bit << 1)
n = n >> 1 # 右移一位
bit_index += 1
# 如果n的位数是奇数,则最高位(奇数位)需要补充0
if bit_index % 2 != 0:
result = result << 1
return result
# 测试
print(swapOddEvenBits(2)) # 输出 1
print(swapOddEvenBits(4)) # 输出 1
print(swapOddEvenBits(12)) # 输出 6
```
### JavaScript 代码示例
```javascript
function swapOddEvenBits(n) {
let result = 0;
let bitIndex = 0;
while (n > 0) {
let bit = n & 1; // 获取最低位
if (bitIndex % 2 === 0) {
// 偶数位,直接添加到结果
result = (result << 1) + bit;
} else {
// 奇数位,先左移一位然后添加到结果的最高位
result = (result << 1) + (bit << 1);
}
n = n >> 1; // 右移一位
bitIndex++;
}
// 如果n的位数是奇数,则最高位(奇数位)需要补充0
if (bitIndex % 2 !== 0) {
result = result << 1;
}
return result;
}
// 测试
console.log(swapOddEvenBits(2)); // 输出 1
console.log(swapOddEvenBits(4)); // 输出 1
console.log(swapOddEvenBits(12)); // 输出 6
```
**码小课**:在编程学习的旅程中,掌握算法和数据结构是至关重要的。通过不断练习和理解这些基础,你可以更好地应对各种编程挑战。码小课网站中有更多相关内容分享给大家学习,帮助大家不断提升编程技能。