You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现32位无符号整数二进制位反转问题及代码排查

如何正确反转32位无符号整数的二进制位?

我懂你遇到的问题了——你写的那段代码失效的核心原因,是忽略了32位无符号整数必须包含所有高位前导零这个要求。

你看,bin(n)返回的二进制字符串是不带前导零的,比如输入43261596时,bin(43261596)只会返回'0b10100101000001111010011100',直接反转bin(n)[:1:-1]的话,会丢掉原数高位的六个零,反转后的字符串长度不足32位,转成整数自然和预期结果不符。

下面给你两种靠谱的实现方式:

方法一:补全32位前导零后反转(直观易懂)

这种方法先把数字格式化为严格32位的二进制字符串,再反转转换,完全贴合题目要求:

def reverseBits(self, n):
    # 将n格式化为32位二进制字符串,不足位用前导零补全
    full_32bit = format(n, '032b')
    # 反转字符串
    reversed_bit = full_32bit[::-1]
    # 转回整数
    return int(reversed_bit, 2)

测试你给的例子:输入43261596时,format会生成完整的'00000010100101000001111010011100',反转后得到'00111001011110000010100101000000',转成整数就是正确的964176192。

方法二:位运算逐位处理(高效性能优)

如果追求更高的性能,位运算的方式更适合,它不需要字符串转换,直接操作二进制位:

def reverseBits(self, n):
    result = 0
    for _ in range(32):
        # 结果左移一位,腾出最后一位的位置
        result <<= 1
        # 取出n的最后一位,放到result的最后一位
        result |= n & 1
        # n右移一位,处理下一位
        n >>= 1
    return result

这个逻辑很清晰:循环32次(对应32位),每次把结果左移腾位置,然后把当前n的最低位取出来加到结果里,再让n右移一位处理下一位。不管原数有没有前导零,都能完整反转所有32位。

内容的提问来源于stack exchange,提问作者casillas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:30:51