我需要使用仅n
位来表示数字x
。通常,我可以选择合适的基数,并找到所需的位数。但在这里,我的约束是我只有'x'位可用。但是,我可以有更多的1组'x'位。
我试图了解如何在任何给定的系统中表示数字,就像这个。
答案 0 :(得分:1)
不确定我是否正确理解了您的问题,但假设您有一个可以用m(例如20)位表示的自然数x,但您只能使用n位数组(例如,字节,即8位数组),你需要的数组量只需m / n四舍五入到下一个自然数。对于具有20位二进制格式的数字,这将是3个字节。
E.g。如果你的号码是
1001 01101100 10110100,
您可以将其存储为
00001001
01101100
10110100.
你做的是
(整数 - )将您的数字除以100000000(10 ^ 1000,或十进制系统中的2 ^ 8),记下余数,截断结果
(整数 - )将1.的结果除以100000000,记下余数,截断结果
(整数 - )将2.的结果除以100000000,记下余数,截断结果
没有什么有趣的了,因为3的结果是0。
假设我们在这里谈论自然数,在十进制系统中,上面看起来像这样:
1. 617652/256 = 2412 remainder 180 (10110100 in binary system)
2. 2412/256 = 9 remainder 108 (01101100 in binary system)
3. 9/256 = 0 remainder 9 (00001101 in binary system)
所以你正在做的是
while (number > 0) {
divide number by 2^n
remember remainder
truncate number
}
恢复原始号码作为练习:)
这实际上是一个问题,无论何时你想在计算机上处理非常大的整数。我想开始寻找更多信息的好地方可能是http://en.wikipedia.org/wiki/Positional_notation。