原码、反码、补码辨析

原码、反码、补码辨析

前提条件:采用八位二进制有符号整数,最高位作为符号位,符号位为0代表正数,符号位为1代表负数。对于正数,原码、反码、补码三者完全相等。

原码
定义:符号位拼接数值位,数值位直接存放数字绝对值对应的二进制。
优点:表示形式直观,和真实数值之间转换简单,方便人类阅读理解。
缺点:硬件实现加减法运算复杂;数字0存在两种不同编码,正零编码00000000,负零编码10000000。
举例:正5的原码为00000101,负5的原码为10000101。

反码
正数规则:反码和原码保持一致。
负数规则:符号位维持不变,数值位全部按位取反,0转变为1,1转变为0。
缺点:依旧存在正零和负零两套编码,减法运算依旧不便,仅仅作为中间过渡编码。
举例:正5反码00000101,负5反码11111010。

补码,计算机实际存储、参与运算使用的编码
正数规则:补码等于反码,也等于原码。
负数规则:负数的反码再加一;也可以理解为二的八次方模运算下的同余数。
优点:数字0仅有唯一编码;减法运算能够直接转换成加法运算;中央处理器只需要加法电路,简化硬件;空余编码可以多表示一个负数。八位有符号补码取值范围负一百二十八到正一百二十七。
举例:正5补码00000101,负5补码11111011。

核心区分
原码:符号位加上绝对值,适合人类阅读,计算机不使用原码进行计算。
反码:负数原码数值位取反得到,仅用于求取补码,计算机内存不保存反码。
补码:计算机底层真实存放的数据,依靠加法实现减法运算。

运算实例,计算5减3,等价于5加上负3
真值5对应补码00000101;负3原码10000011,负3反码11111100,负3补码11111101。
补码相加:00000101 加上 11111101,运算得到100000010。
八位运算舍弃溢出的最高进位,最终结果00000010,对应十进制数值2。
如果直接使用原码相加会输出错误结果;反码运算结束之后需要额外处理溢出进位,硬件实现繁琐,所以计算机选用补码。

易错要点
只有负数的原码反码补码互不相同;正数三种编码全部一致。
负一百二十八在八位模式下只有补码编码10000000,不存在对应的原码和反码。
反码只是推导补码的中间过程,不会在内存当中存储。
补码底层依靠模运算思想,使用加法代替减法,以此简化硬件电路。

posted @ 2026-09-25 11:12  郝帅嘉  阅读(9)  评论(0)    收藏  举报