补码是最常见的有符号数的计算机表示方式。在这个定义中,将字的最高有效位解释为负权(negative weight)。
补码编码的定义
- 当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算。
- 当把short转换成unsigned int时,我们要先改变大小,之后再完成从有符号到无符号的转换。这个规则是C语言标准要求的。
short sx = -12345;
unsigned uy = sx; //4294954951
-1<0;//true
-1<0u;//false
(unsigned)-1>-2;//true
- 补码的非
执行补码非的一种方法是对每一位求补,再对结果加1。在C语言中,对于任意整数值x,计算表达式-x和~x+1得到的结果完全一样。