如何确定设置了哪个位



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

例:如果我有二进制 0001 0010 = 十进制 18我如何知道位 1 和 4 已设置?

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

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

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

你知道 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,这意味着您可以减去 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,这意味着您可以减去 2,第 1 位为 1
  10. 数字的其余部分为 0,则每个后续位均为 0

随着你的"在我的脑海中,没有编码"的澄清,这个答案 总结得很好。目前还不清楚你想知道哪些位是从二进制数还是十进制数设置的,我会假设后者,因为查看一个位是否从二进制数设置是微不足道的。我想在鲍里斯的回答中添加几件事:

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

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

  • 您可以通过找到小于您正在分析的数字的最大 2 的幂来知道最大设置位。不会设置超出此位的位(如果是,它们将大于您找到的 2 的幂,从而使其最大值无效(。

  • 从现在开始,你基本上按照鲍里斯告诉你的去做。这是对 2 的每次幂的线性检查。

我想你可能想阅读这个,以便更好地理解你在问什么。

相关内容

  • 没有找到相关文章

最新更新