如何确定设置了什么位?

时间:2013-10-09 12:56:41

标签: math binary binary-data

“这个位设置”是什么意思,应该如何确定哪些位被设置,哪些不是。

实施例: 如果我有二进制0001 0010 =十进制18 我怎么知道第1和第4位被设置了?

澄清:在我脑海中,没有编码

3 个答案:

答案 0 :(得分:0)

您要做的是将数字从基数10转换为基数2。 这是一个快速教程: http://math.about.com/od/calculuslessons/a/changebase.htm

答案 1 :(得分:0)

用“我的头脑,没有编码”澄清,this answer  总结得很好。目前还不清楚你是否想要知道从二进制数或十进制数设置哪些位,我会假设后者,因为看看是否从二进制数设置了一个位是微不足道的。我想给鲍里斯回答一些事情:

  • 如果数值为1,则设置数字B的位K,这意味着您需要将K的2次幂加到总和中以获得B.请记住,在二进制表示法中,每个正数整数表示为2的幂之和。2的幂不能表示为2的较小幂的总和,从而使数字的二进制表示唯一。

  • 您可以立即知道第一位是否已设置,因为它定义了奇偶校验(0-even,1-odd)。

  • 通过查找小于您正在分析的数字的2的最大功率,您可以知道最大的设置位。除此之外不会设置任何位(如果它们是,它们将大于您找到的2的幂,从而使其最大化无效)。

  • 从这里开始,你基本上就像鲍里斯告诉你的那样。它是对每个2的幂的线性检查。

我想您可能想了解this以更好地了解您的要求。

答案 2 :(得分:0)

我正在使用基于减去数字的方法。

你知道2的力量:

2^0 =   1
2^1 =   2
2^2 =   4
2^3 =   8
2^4 =  16
2^5 =  32
2^6 =  64
2^7 = 128

然后取你想要的任何数字并尝试减去2的幂的最大值,但结果必须大于或等于0.

示例:

  1. 取数字18。
  2. 尝试减去128:18-128 = -110,这意味着你不能减去128,第7位是0
  3. 尝试减去64:18-64 = -46,这意味着你不能减去64,第6位是0
  4. 尝试减去32:18-32 = -14,这意味着你不能减去32,第5位是0
  5. 尝试减去16:18-16 = 2,表示你 CAN 减去16,第4位为1
  6. 继续其余:18-16 2
  7. 尝试减去8:2-8 = -6,这意味着你不能减去8,第3位是0
  8. 尝试减去4:2-4 = -2,这意味着你不能减去4,第2位是0
  9. 尝试减去2:2-2 = 0,表示你 CAN 减去2,第1位为1
  10. 数字的其余部分为0,然后每个后续位为0