“这个位设置”是什么意思,应该如何确定哪些位被设置,哪些不是。
实施例: 如果我有二进制0001 0010 =十进制18 我怎么知道第1和第4位被设置了?
澄清:在我脑海中,没有编码
答案 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.
示例: