想一想十进制。如果您只有 2 位数字,这意味着您可以将 from 存储00
到99
其中。如果您有 4 位数字,则该范围0000
变为9999
。
二进制数类似于十进制,除了数字只能是0
and 1
,而不是0
, 1
, 2
, 3
, ..., 9
。
如果你有这样的号码:
01011101
这是:
0*128 + 1*64 + 0*32 + 1*16 + 1*8 + 1*4 + 0*2 + 1*1 = 93
如您所见,您可以存储比9
一个字节更大的值。在一个无符号的 8 位数字中,您实际上可以存储从00000000
到 的值11111111
,即十进制的 255。
在一个 2 字节的数字中,这个范围变成了从00000000 00000000
到11111111 11111111
恰好是 65535。
您的说法“存储数字的二进制表示需要 8 位”就像说“存储数字的十进制表示需要 8 位”,这是不正确的。例如,数字 12345678901234567890 的位数超过 8 位。同样,您不能将所有数字都放入 8 位,而只能容纳 256 个。这就是你得到 2 字节 ( short
)、4 字节 ( int
) 和 8 字节 ( long long
) 数字的原因。实际上,如果您需要更大范围的数字,则需要使用库。
只要涉及负数,在 2 的补码计算机中,它们只是使用范围的上半部分作为负值的惯例。这意味着1
左侧有 a 的数字被认为是负数。
尽管如此,这些数字与它们的正值模 256(模如果位)一致,正如数字所暗示的那样2^n
。n
例如,如果无符号数11111111
为 255,如果有符号-1
数则以 256 为模全等。