您可以将十进制转换为二进制,而将二进制转换为十进制。但是如何表示数字“ 256”?
255 = 11111111
1个字节不能超过8个二进制数字(位)。这怎么可能?
您可以将十进制转换为二进制,而将二进制转换为十进制。但是如何表示数字“ 256”?
255 = 11111111
1个字节不能超过8个二进制数字(位)。这怎么可能?
Answers:
您要求如何用二进制表示256,但是我想您想知道为什么人们说字节存储的最大数字为255时,字节可以存储256个不同的数字。正如克劳迪奥普所说,计算机从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个数字。
对于带符号的值,第一位是“符号”位。如果该位置1,则数字为负。10000000为负,01000000为正,11111111为负,01111111为正...
如果您使用的是Windows(也许Mac也有),则可以打开计算器,将其切换到编程器模式,选择sbyte,然后随便看看这些位与小数表示的关系。
如您所知,255d(十进制)等于11111111b(二进制)。如果现在想将值加1,则有两种可能性:
您只有8位。在这种情况下,发生所谓的溢出。因此,在“内部”,将添加1,从而产生100000000b(9位256d)。但是由于只有8位可用,因此低8位将被“返回”。因此,您最终得到0d = 0b(在大多数计算机体系结构上都将设置一个特殊的溢出标志,以作说明)。
认为这与用手指数数相同。想象一下,您的手指显示9d。现在,您再添加一根手指。最后得到10。如果还要添加一,该怎么办?
另一种可能性是您有超过8位可用。在这种情况下,您只需在开头再加上一个数字,结果实际上就是100000000b = 256d。
字节是计算机系统(内存系统)可以寻址的最小“单位”。这意味着,如果您只想知道一个位,就必须要求存储系统从地址中给您一个特定的字节,然后您必须弄清您对自己感兴趣的位的值。
但是,就像8位组成一个字节一样,也有更大的数据类型。2个字节组成一个字(16位),两个字(四个字节,32位)组成一个双字。当今的标准64位体系结构甚至具有64位数据类型(所谓的寄存器)。