C的补码设置是为了方便表示各个数,以及实现减法变为加法运算。补码所遵循的规则是出于科学性质考虑的。我们先抛开补码的实现规则,从补码的出发点来考虑。比如8bit的short int,每一位都有两种可能,0或1.则一定是可以表示2的8次方,即256个数的。然而如果按照一般的二进制定义规则,可以实现+127~-127,一共255个数。还有一个是由于+0与-0表示同一个数。采取补码规则可知,+0与-0的补码都是00000000。原来的+127~-127的数都可以无重复地转为相应的补码。这时候,+0-0重复地现象解决了,那剩下一个0,1组合10000000是无法从-127~+127的源码转换而成的,就约定成-128。(以上是引用的百度知道的回答,如若侵权,我会立即删除)