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

如何修改Python拼接二进制的joined函数,使其匹配0b字面量断言(禁用字符串)

问题核心原因

你当前代码的核心问题是把二进制数位按十进制规则拼接,得到的是十进制表示的「二进制外观数值」,和Python二进制字面量对应的实际整数值不匹配。比如joined(1,3)你当前返回的是十进制的11011,而断言中的0b11011对应的实际十进制值是27,二者自然不相等。


修改方案

调整拼接逻辑,直接对整数进行二进制位拼接:每拼接一个新数字前,先将现有结果左移「新数字的二进制位数」位(等价于乘以2的位数次方),再和新数字做按位或(等价于相加)即可,全程不需要字符串操作,也不需要额外将数字转成十进制格式的二进制串。

修改后完整可运行代码如下:

def get_binary_bit_count(num):
    # 计算数字的二进制位数,无字符串操作
    if num == 0:
        return 1
    count = 0
    while num > 0:
        num = num >> 1
        count += 1
    return count

def joined(start, count):
    result = 0
    end = start + count
    for i in range(start, end):
        bit_len = get_binary_bit_count(i)
        # 左移对应位数后拼接新数字
        result = (result << bit_len) | i
    return result


def main():
    assert joined(1, 3) == 0b11011
    assert joined(10, 4) == 0b1010101111001101
    assert joined(8, 5) == 0b10001001101010111100
    assert joined(99, 2) == 0b11000111100100
    assert joined(999, 3) == 0b111110011111111010001111101001
    assert joined(1111, 1) == 0b10001010111
    print("所有断言校验通过")

if __name__ == "__main__":
    main()

逻辑验证示例(以joined(1,3)为例)

  1. 初始result=0,第一个数字1,二进制位数1,result = (0<<1)|1 = 1
  2. 第二个数字2,二进制位数2,result = (1<<2)|2 = 4+2=6(二进制110)
  3. 第三个数字3,二进制位数2,result = (6<<2)|3 =24+3=27,对应0b11011,完全匹配断言要求。

内容的提问来源于stack exchange,提问作者Petra Štěpánová

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:06:03