首先我们知道,在计算机中正数、负数的表示区别就是最高位是0还是1
但是负数在计算机中可不只是把高位变成1那么简单,它有特定的补码表示法也就是对应正数的原码取反再加一
比如:
10的二进制表示为:00001010
-10的二进制则表示为:00001010 -> 11110101 -> 11110110
如果你想从负数变为正数的二进制,也可以先取反再加一,看上去应该先减一,再取反,但是计算机只能做加法,并且补码的好处就是再次做补码运算就可以得到原码,类似于十进制中的负负得正。
一个byte有8位,其最多能表示的数在-128~127之间,原因是除去最高位的标志位,最大可以表示的二进制是:01111111,最小可以表示的二进制是:10000000,其他的也是类似,负数会比正数多表示一个数
为什么计算机会使用这种补码的方式来表示负数?
因为只有这样表示计算机才能正常的加减(计算机只能做加法),下面来看几种情况:
计算1-1,对计算机来说也就是1 + (-1)
如果用原码表示负数:
计算的结果是-2,明显是不对的
如果用补码来表示负数:
结果是0正确
二进制的加减法可能会出现两个正数相加等于负数的情况