fud*_*din 18 unsigned decimal unsigned-integer
这是一个我坚持的功课问题.
考虑无符号整数表示.存储包含以下内容的十进制数需要多少位:
i) 3 digits ii) 4 digits iii) 6 digits iv) n digits
Run Code Online (Sandbox Code Playgroud)
我知道无符号整数的范围是0到2 ^ n,但我不知道表示数字所需的位数如何取决于它.请帮帮我.
提前致谢.
gua*_*npt 27
那么,您只需计算每个案例的范围,并找到高于该范围的2的最低功率.
例如,在i)中,3个十进制数字 - > 10 ^ 3 = 1000个可能的数字,因此您必须找到高于1000的最低2的幂,在这种情况下是2 ^ 10 = 1024(10位).
编辑:基本上你需要找到你所拥有的位数的可能数字的数量,然后找到哪个数字位数(在另一个基数,在这种情况下,基数2,二进制)至少具有与一个数字相同的可能数字十进制.
计算给定位数的可能性数量: possibilities=base^ndigits
所以,如果你有十进制的3位数(基数10),你有10^3=1000可能.然后你必须找到二进制数位(位数,基数2),以便可能性的数量至少为1000,在这种情况下是2^10=1024(9位数不够,因为2^9=512它小于1000).
如果你概括一下,你有: 2^nbits=possibilities <=> nbits=log2(possibilities)
其中适用于i)给出:log2(1000)=9.97并且由于位数必须是整数,因此必须将其四舍五入为10.
可以由以b为基数的n位数字表示的最大数字是b n - 1。因此,可以用N 个二进制数字表示的最大数是2 N - 1。我们需要最小的整数N使得:
2 N - 1 ? b n - 1
? 2 N ? b ñ
取最后一个表达式两边的以 2 为底的对数给出:
日志2 2 N ? 对数2 b n
? 否 对数2 b n
? 否 log b n / log 2
因为我们想要满足最后一个关系的最小整数N,所以要找到N,找到log b n / log 2并取上限。
在最后一个表达式中,任何底数都适用于对数,只要两个底数相同即可。这里很方便,因为我们对b = 10的情况感兴趣,利用log 10 10 n == n使用以10为底的对数。
对于n = 3:
N = ?3 / log 10 2? = 10
对于n = 4:
N = ?4 / log 10 2? = 14
对于n = 6:
N = ?6 / log 10 2? = 20
一般来说,对于n 个十进制数字:
N = ?n / log 10 2?
存储n个整数所需的二进制位数的公式(例如,0到n - 1)是:
并且围捕.
例如,对于值-128到127(有符号字节)或0到255(无符号字节),整数个数是256,因此n是256,从上面的公式得到8.
对于0到n,在上面的公式中使用n + 1(有n + 1个整数).
在您的计算器上,log e可能只标记为log或ln(自然对数).