当前位置: 面试刷题>> 交换奇偶二进制位 (经典算法题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 ``` **码小课**:在编程学习的旅程中,掌握算法和数据结构是至关重要的。通过不断练习和理解这些基础,你可以更好地应对各种编程挑战。码小课网站中有更多相关内容分享给大家学习,帮助大家不断提升编程技能。