当前位置: 面试刷题>> 交换奇偶二进制位 (经典算法题500道)


题目描述补充

题目:交换奇偶二进制位

给定一个非负整数 n,请编写一个函数来交换其二进制表示中的奇数位(从右向左数,第1位是奇数位)和偶数位(从右向左数,第0位是偶数位),然后返回交换后的结果。

注意

  • 输入的数字 n 是一个非负整数。
  • 你的函数应当返回交换后的整数,而不是以字符串或其他形式。

示例

输入n = 2 二进制表示10 交换后的二进制表示01 输出1

输入n = 4 二进制表示100 交换后的二进制表示001 输出1

输入n = 12 二进制表示1100 交换后的二进制表示0110 输出6

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 代码示例

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 代码示例

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

码小课:在编程学习的旅程中,掌握算法和数据结构是至关重要的。通过不断练习和理解这些基础,你可以更好地应对各种编程挑战。码小课网站中有更多相关内容分享给大家学习,帮助大家不断提升编程技能。

推荐面试题