【位运算-简单】面试题 05.07. 配对交换

这篇博客介绍了如何使用位运算高效地交换整数的奇数位和偶数位。通过位与(&)、位左移(<<)、位右移(>>)等操作,实现位交换,适用于二进制表示的整数。示例代码展示了两种方法,一种基于字符串操作,另一种基于位运算,实现了在给定范围内(0,2^30-1)整数的奇偶位交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目】
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
【示例1】
输入:num = 2(或者0b10)
输出 1 (或者 0b01)
【示例2】
输入:num = 3
输出:3
【提示】
num的范围在[0, 230 - 1]之间,不会发生整数溢出。
【代码】
【Python】
在这里插入图片描述

class Solution:
    def exchangeBits(self, num: int) -> int:
        s_num=list(bin(num)[2:])
        if len(s_num)%2:
            s_num.insert(0,"0")
        i=1
        while i < len(s_num):
            temp=s_num[i]
            s_num[i]=s_num[i-1]
            s_num[i-1]=temp
            i+=2
        return int("".join(s_num),2)

【方法2:位运算】
在这里插入图片描述

class Solution:
    def exchangeBits(self, num: int) -> int:
        odd = num & 0x55555555
        even = num & 0xaaaaaaaa
        odd <<=1
        even >>=1
        return odd | even
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值