C语言中有符号整数中0的表示方式

    如何表示有符号整数取决于硬件,而不是C语言本身。也许表示有符号数最简单的方式式用1位(如,高阶位:即二进制方式存储数据时的最高位)存储符号,只剩下7位表示数字本身(假设存储在1个字节中)。用这种符号量表示法,1000,0001表示-1, 0000,0001表示1。因此,其表示范围是-127~+127。这种方法的缺点是有两个0:+0和-0。这很容易混淆,而且用两个位组合(即两个字节表示同一个数字)来表示一个值也有些浪费。  

    二进制补码方法避免了这个问题,是当今最常用的系统。我们将以1字节为例,讨论这种方法。二进制补码用1字节中的后7位表示0~127,高阶位设置为0。目前,这种方法和符号量的方法相同(即上述方法)。另外,如果高阶位是1,表示的值为负。这两种方法的区别在于如何确定负值。从一个9位组合1,0000,0000(256的二进制形式)减去一个负数的位组合,结果是该负值的量。例如,假设一个负值的位组合为1000,0000,作为一个无符号数,该组合表示128;作为一个有符号值,该组合表示负值(高阶位为1),而且值为1,0000,0000 - 1000,0000,即1000,0000(128)。因此,该数是-128(在符号量表示法中,该位组合表示-0)。类似的,1000,0001是-127,1111,1111是﹣1。该方法可以表示-128~+127范围内的整数。

    要得到一个二进制补码数的相反数,最简单的办法是反转每一位(即0变1,1变0),然后加1。因为1是0000,0001,那么-1则是1111,1110+1,或1111,1111。这与上面的方法表示一致。                                                                                                                                                                                                  

 

 

 


版权声明:本文为weixin_44737249原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。