8位有符号整数-128的二进制码是1000 0000,而+128的二进制码也是1000 0000,你是不是觉得很奇怪?
下面就让我来解释一下。
从-128到127的跨越
8位二进制数能够表示2^8共256个不同的值,从0000 0000到1111 1111。在8位有符号整数的世界,它的取值范围从-128到+127,其中负数128个,正数(包括0)128个,负数是-1到-128,因为有0的存在,所以正数是0到127。
在一个8位有符号整数系统中,最大能表示的正数是+127(0111 1111),因为最高位(即最左边的位)被用作符号位,0表示正数,1表示负数。
因此,128实际上不能用一个8位有符号整数直接表示。128的16位二进制表示是0000 0000 1000 0000,这里,最高位是0,表示它是正数。
二进制如何表示负数呢?
二进制表示正负数时,一般会把最高位当做符号位,符号位0表示正数,1表示负数,那么-1用二进制怎么表示呢?1用二进制表示为00000001,所以推算一下-1应该就是10000001吧?让我们来验证一下,看看对不对,十进制 1 +(-1)= 0,二进制 00000001 + 10000001 = 10000010 很明显不等于0 啊。
我们知道二进制1是00000001,那么我们倒推一下,00000001加上什么数会等于00000000呢?
想来想去都想不到啊,不知道你有没有发现,计算机是没有减法运算的,计算机的减法是通过加法实现的,那么加法怎么能达到减法的效果呢?
我们看下这个例子:

1 00000000超出了一个字节的范围,最高位1被舍弃,剩下的就是 00000000,这就是十进制的0啊,推理可得-1用二进制表示就是11111111,好神奇,原来

本文解释了8位有符号整数中-128的特殊二进制表示(10000000),以及为何128无法直接表示,通过补码概念和计算机的加法原理来展示负数的表示方法。同时讨论了16位有符号整数中-128和-32768的表示情况。
最低0.47元/天 解锁文章
476





