首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取二进制表示为1的数字?

如何获取二进制表示为1的数字?
EN

Stack Overflow用户
提问于 2019-11-03 06:46:12
回答 2查看 129关注 0票数 3

我正在尝试用python实现一些快速的二进制求幂。我想知道数字的二进制表示返回1的整数。也许举个例子会更清楚:

代码语言:javascript
运行
复制
bin(13) # returns 1101 because one 8 + one 4 + one 1 = 13. 

我如何构建一个返回8,4,1的函数,将二进制数作为参数传递?正如你所看到的,我不是显式地试图得到2的幂,而是极简主义的表示法来将这些幂相乘。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-03 14:09:47

这个问题有点让人困惑(请看我的评论),但我还是想分享一个解决方案,因为目前接受的答案对我来说似乎令人费解。出于好奇心,我明天可能会比较和测试一堆不同的解决方案。

代码语言:javascript
运行
复制
bin_num = bin(13)

def bin_str_decomp(bin_num_str):
    bin_clean = bin_num_str[:1:-1]
    return [1 << idx for idx, bit in enumerate(bin_clean) if bit == '1']

print(bin_str_decomp(bin_num))
票数 2
EN

Stack Overflow用户

发布于 2019-11-03 07:14:37

你可以在下面这几行中做一些事情:

代码语言:javascript
运行
复制
# Split the binary and grab interested part, and its size.
# >> bin(123456789) == "0b111010110111100110100010101"
binary = bin(123456789)[2:]
size = len(binary)

numbers = []
for i in range(size):
    # Checks to see if the binary[i] is not equals to zero.
    if binary[i] is not "0":
        # Indexes the `binary` string and adds (size - i - 1) zeros to the end of it.
        number = int(binary[i] + "0" * (size - i - 1), 2)
        numbers.append(number)


print(numbers)
# >> [67108864, 33554432, 16777216, 4194304, 1048576, 524288, 131072, 65536, 32768, 16384, 2048, 1024, 256, 16, 4, 1]

这里有一个更短的解决方案。

代码语言:javascript
运行
复制
binary = bin(13)[2:]

nums = [
    int(binary[i] + "0" * (len(binary) - i - 1), 2)
    for i in range(len(binary))
    if binary[i] is not "0"
]
return nums

下面是单行解决方案,也是为了解决这个问题。

代码语言:javascript
运行
复制
print((lambda binary: [int(binary[i] + "0" * (len(binary) - i - 1), 2) for i in range(len(binary)) if binary[i] is not "0"])(binary = bin(123456789)[2:]))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58675946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档