您可以将十进制转换为二进制,也可以将二进制转换为十进制。但是如何表示数字“256”呢?
255 = 11111111
1 个字节不能超过 8 个二进制数字(位)。这怎么可能?
mow*_*ker 40
你问如何用二进制表示 256,但我猜你想知道为什么人们说字节可以存储 256 个不同的数字,而它存储的最大数字是 255。正如克劳迪奥普所说,计算机从 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为负,01111111为正...
如果您在 Windows 上(也许 mac 也有),您可以打开计算器,将其切换到程序员模式,选择 sbyte,然后使用这些位来查看它们与十进制表示的关系。
Shi*_*Shi 11
如您所知,255d(十进制)等于 11111111b(二进制)。如果你现在想给值加 1,有两种可能:
要么你只有8位。在这种情况下,会发生所谓的溢出。因此,“内部”,将添加 1 产生 100000000b(9 位中的 256d)。但是因为你只有 8 位可用,低 8 位将被“返回”。所以你最终得到 0d = 0b (一个特殊的溢出标志将在大多数计算机体系结构上设置,作为旁注。)
将此视为与用手指计数相同。想象你的手指显示 9d。现在您再添加一根手指。你最终得到了 10 个。如果你还想再增加一个,你会怎么做?
另一种可能性是您有超过 8 位可用。在这种情况下,您可以简单地在开头再添加一位数字,结果实际上是 100000000b = 256d。
字节是计算机系统(内存系统)可以寻址的最小“单位”。这意味着如果你只想知道一个位,你必须要求内存系统从地址中给你一个特定的字节,然后你必须自己找出你感兴趣的位的值。
但是与 8 位组成一个字节的方式相同,也有更大的数据类型。2 个字节组成一个字(16 位),两个字(四个字节,32 位)组成一个双字。现在标准的 64 位架构甚至有 64 位数据类型(所谓的寄存器)。
归档时间: |
|
查看次数: |
49961 次 |
最近记录: |