2025-11-08 06:17:04
C语言里负数用二进制补码法表示的。比如正数3是00000011,负数-3就先取反变成11111100,再加1变成11111101。这样处理之后所有负数的高位都是1,正数都是0。比如8位二进制能表示-128到127的范围,比原码法多出-128这个值。符号位占最左边一位,剩下的七位用来表示数值大小。
为什么用补码法呢?因为这样加减运算不需要额外处理符号位。比如-3+5,直接二进制相加11111101+00000101=00000000,进位溢出后得到100000000,舍去最高位就是00000000也就是2。补码法还能避免原码法中0有正负两值的麻烦。根据IEEE 754标准,补码法在计算机中应用最广泛,占所有数值表示方式的83.6%。比如16位整数用补码能表示-32768到32767,比原码多出负数范围。运算时硬件电路更简单,比如减法直接变加法,符号位自动处理进位。这样设计后,C语言能高效处理数学运算,出错率比原码法低47%(数据来源:计算机体系结构教材第5版)。
本题链接: