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

关于random.sample与位运算sum生成大值及二进制串的技术疑问

问题解析

一、sum(1<<i for i in ...)生成大数值的原因

首先明确1 << i的含义:这是二进制左移运算,把数字1的二进制位向左移动i位,等价于计算数学上的2^i(2的i次方)。

以你例子里的i=6、26、38为例:

  • 1 << 6 = 2^6 = 64
  • 1 << 26 = 2^26 = 67108864
  • 1 << 38 = 2^38 = 274877906944

将这三个数相加:64 + 67108864 + 274877906944 = 274945015872,就是你看到的test_num数值。

这个数之所以大,是因为2的幂次增长极快:210是1024,220突破百万,230超过10亿,238直接达到2700多亿,相加后自然是个庞大的数。

二、39位二进制串的生成原理

代码里的f"{test_num:039b}"是Python的字符串格式化语法,各部分作用:

  • :b:将整数转换为二进制字符串
  • 039:如果二进制串长度不足39位,在前面补前导零,强制让总长度为39位

结合你的例子,test_num是2^6 + 2^26 + 2^38,对应的二进制就是在第39位(从右往左数,从0开始计数则是第38位)、第27位(26+1)、第7位(6+1)的位置为1,其余位为0。由于1<<38的二进制是1后面跟38个0,刚好是39位,用039b格式化后,就会得到你看到的100000000000100000000000000000001000000——三个1分别对应38、26、6的位置,其余补零凑够39位。

另外提一句:代码里的print(print(f"{test_num:039b}"))会输出两次内容——先打印二进制串,再打印内层print的返回值None,这是个小失误,改成print(f"{test_num:039b}")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:15:43