例如,如果n=9
,则可以用9个二进制数字(位)表示多少个不同的值?
我的想法是,如果我将这9位中的每一位设置为1,我将使这9位数能够表示的最高数字。因此,最高值为1 1111 1111
,等于十进制的511
。因此,我得出结论,二进制的9位数可以代表511个不同的值。
我的思维过程是否正确?如果没有,有人可以解释我错过了什么吗?如何将其推广到n
位?
答案 0 :(得分:51)
2 9 = 512个值,因为这是你可以拥有多少个零和一个组合。
这些值代表的含义取决于您使用的系统。如果它是无符号整数,您将拥有:
000000000 = 0 (min)
000000001 = 1
...
111111110 = 510
111111111 = 511 (max)
在two's complement中,通常用于表示二进制中的整数,您将拥有:
000000000 = 0
000000001 = 1
...
011111110 = 254
011111111 = 255 (max)
100000000 = -256 (min) <- yay integer overflow
100000001 = -255
...
111111110 = -2
111111111 = -1
通常,使用 k 位,您可以表示2 k 值。它们的范围取决于您使用的系统:
无符号:0到2 k -1
签名:-2 k-1 至2 k-1 -1
答案 1 :(得分:10)
你缺少什么:零是一个值
答案 2 :(得分:2)
解决问题的更好方法是从小处着手。
让我们从1位开始。哪个可以是1
或0
。这是2个值,或二进制的10
。
现在有2位,可以是00
,01
,10
或11
这是4个值,或者是二进制的100
...模式?
答案 3 :(得分:1)
好的,因为它已经“泄露”了:你错过了零,所以正确的答案是512
(511是最大的答案,但它是0到511,而不是1到511)。
顺便说一下,一个好的后续练习就是概括一下:
How many different values can be represented in n binary digits (bits)?
答案 4 :(得分:1)
不想在这里给出答案是逻辑。
每个数字中有2个可能的值。你有9个。
就像在基数10中,你有10个不同的数字值表示你有2个(从0到99):0到99会产生100个数字。如果你进行计算,你就有一个指数函数
base^numberOfDigits:
10^2 = 100 ;
2^9 = 512
答案 5 :(得分:1)
有一种更容易思考的方法。从1位开始。这显然可以代表2个值(0或1)。添加一点后会发生什么?我们现在可以表示两倍的值:我们可以在添加0之前表示的值以及我们之前可以用1附加的值表示的值。
因此,我们用n位表示的值的数量只有2 ^ n(2到幂n)
答案 6 :(得分:1)
您缺少的是使用哪种编码方案。编码二进制数有不同的方法。查看签名的数字表示。对于9位,可以表示的范围和数量将根据使用的系统而有所不同。