【问题标题】:How to generate decimal in range for 24 bit?如何为 24 位生成范围内的小数?
【发布时间】:2015-07-05 04:07:23
【问题描述】:

我有 24 位二进制文​​件,即 111010001100001010011000 等于 15254168

我只“猜测”它的 24 位,因为二进制长度是 24。

我想以编程方式生成所有 24 位小数。 (C、PHP 或 Python)

2**24 返回 16.777.216

所以还有 16.777.216 个其他小数(组合)。我怎样才能生成它们?

我无法理解 24 位的“范围”。 有人可以帮我解决这个问题吗?

谢谢。

【问题讨论】:

  • 使用哪种编程语言?
  • 顺便说一句,答案很简单:从 0 到 2^24 - 1 的所有数字
  • @mescalinum 我更喜欢 PHP 和 Python
  • 你能解释一下为什么你需要一个“算法”来完成这个任务吗?
  • @mescalinum 我正在试验射频 (RF),它只接受十进制值。软件进行二进制转换。所以我必须提供 24 位小数。

标签: php python math


【解决方案1】:
<!-- language: python -->

这是你想要的吗?

>>> n = 3
>>> result = [bin(k)[2:].rjust(n, '0') for k in xrange(2**n)]
>>> print result
['000', '001', '010', '011', '100', '101', '110', '111']
>>> n = 24 

【讨论】:

  • ['{:024b}'.format(k) for k in range(2**24)] 更快
  • 谢谢拉斐尔和@mescalinum。效果很好!
【解决方案2】:

24 位只是意味着有 24 位(零或一)共同创建一个二进制数。

如果你想要所有的组合,或者所有可以用 24 位表示的数字,它只是从 0 到 16777215 的范围。为什么?这是格式(二进制=十进制)的表格:

000000000000000000000000 = 0
000000000000000000000001 = 1
000000000000000000000010 = 2
000000000000000000000011 = 3
....
....
111111111111111111111110 = 16777214
111111111111111111111111 = 16777215

你真的不需要生成任何东西。你可以在这里检查二进制到十进制:http://www.binaryhexconverter.com/binary-to-decimal-converter

另一件事:有时在二进制中,前导零被省略。所以十进制三不是 000000000000000000000011 而只是 11。如果长度是 24 并且第一个数字是 1,它仍然只是范围 8388608 - 16777215

【讨论】:

  • 谢谢。但是我必须为软件“生成”。第一个数字是 0,所以整个范围是 1-16777215,对吧?我只需要用零“填充”以使其成为 24 位二进制。对吗?
  • 如果你需要一个包含所有 1600 万个二进制数的列表,你可以在 python 中这样做:
  • for dec in range(0,2**24): print("{:0>24}".format(bin(dec)[2:]))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2010-12-24
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多