"这个位被设置"是什么意思,应该如何确定哪些位被设置,哪些不被设置。
例:如果我有二进制 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。
例:
- 取数字 18。
- 尝试减去 128:18-128 = -110,表示你不能减去 128,第 7 位为 0
- 尝试减去 64:18-64 = -46,表示你不能减去 64,第 6 位为 0
- 尝试减去 32:18-32 = -14,表示你不能减去 32,第 5 位为 0
- 尝试减去 16:18-16 = 2,这意味着您可以减去 16,第 4 位为 1
- 继续其余: 18-16 2
- 尝试减去 8:2-8 = -6,表示你不能减去 8,第 3 位为 0
- 尝试减去 4:2-4 = -2,表示你不能减去 4,第 2 位为 0
- 尝试减去 2:2-2 = 0,这意味着您可以减去 2,第 1 位为 1
- 数字的其余部分为 0,则每个后续位均为 0
随着你的"在我的脑海中,没有编码"的澄清,这个答案 总结得很好。目前还不清楚你想知道哪些位是从二进制数还是十进制数设置的,我会假设后者,因为查看一个位是否从二进制数设置是微不足道的。我想在鲍里斯的回答中添加几件事:
-
如果数字 B 的值为 1,则设置数字 B 的位 K,这意味着您需要将 2 的 K 次方添加到您的总和中才能得到 B.请记住,在二进制表示法中,每个正整数都表示为 2 的幂之和。2 的幂不能表示为 2 的较小幂之和,从而使数字的二进制表示唯一。
-
您可以立即知道是否设置了第一位,因为它定义了奇偶校验(0 偶数、1 奇数(。
-
您可以通过找到小于您正在分析的数字的最大 2 的幂来知道最大设置位。不会设置超出此位的位(如果是,它们将大于您找到的 2 的幂,从而使其最大值无效(。
-
从现在开始,你基本上按照鲍里斯告诉你的去做。这是对 2 的每次幂的线性检查。
我想你可能想阅读这个,以便更好地理解你在问什么。