你可以将十进制转换为二进制,也可以将二进制转换为十进制。但是如何表示数字“256”呢?
255 = 11111111
1 个字节不能超过 8 个二进制数字(位)。这怎么可能呢?
答案1
您问如何用二进制表示 256,但我猜您想知道为什么人们说字节可以存储 256 个不同的数字,而它存储的最大数字是 255。正如 Claudiop 所说,计算机从 0 开始计数,所以 0 实际上是第一个数字,1 是第二个,2 是第三个......255 是第 256 个。
此外,对于无符号字节,11111111 仅为 255。对于有符号字节(有符号值可以容纳负值),11111111 实际上是 -1。请参阅http://en.wikipedia.org/wiki/Two's_complement。二进制补码的工作方式是,将负数添加到正数将得到 0。正如其他人所说,如果我们将一位添加到 11111111,并且您的数据类型只能支持 8 位,则最后一位将溢出并留下 0。对于有符号字节,值的范围是 -128 到 127。128 个负数 + 0 + 127 个正数 = 总共 256 个数字。
对于有符号值,第一位是“符号”位。如果设置了此位,则数字为负数。10000000 为负数,01000000 为正数,11111111 为负数,011111111 为正数……
如果您使用的是 Windows(也许 Mac 也有),您可以打开计算器,将其切换到程序员模式,选择 sbyte,然后摆弄这些位,看看它们与十进制表示之间的关系。
答案2
嗯,你需要 2 个字节来表示它。256 = 00000001 00000000
答案3
您已经知道,255d(十进制)等于 11111111b(二进制)。如果现在想将值加 1,则有两种可能:
要么你只有 8 位。在这种情况下,所谓的溢出会发生这种情况。因此“内部”会添加 1,结果为 100000000b(9 位中的 256d)。但由于只有 8 位可用,因此将“返回”较低的 8 位。因此最终会得到 0d = 0b(大多数计算机架构上都会设置一个特殊的溢出标志,仅供参考。)
想象一下用手指数数。想象一下你的手指显示 9d。现在你再加一根手指。最后得到 10。如果你想再加一个,你会怎么做?
另一种可能性是,您有超过 8 位可用。在这种情况下,您只需在开头再添加一位数字,结果实际上将是 100000000b = 256d。
字节是计算机系统(内存系统)可以寻址的最小“单位”。这意味着,如果您只想知道单个位,您必须要求内存系统从地址中为您提供某个字节,然后您必须自己找出您感兴趣的位的值。
但就像 8 位组成一个字节一样,也有更大的数据类型。2 个字节组成一个字(16 位),两个字(4 个字节,32 位)组成一个双字。如今的标准 64 位架构甚至有 64 位数据类型(所谓的寄存器)。