原码反码补码

原码、反码、补码知识点总结

原码、反码、补码是计算机针对有符号整数制定的三套二进制编码标准。在Java语言中,byte、short、int、long四类整型数据,底层统一以补码形式存储、参与所有运算,这也是Java整数运算的核心底层逻辑。

原码是最符合人类阅读习惯的二进制编码方式。它规定二进制最高位为符号位,其中0代表正数、1代表负数,剩余所有数位直接存储数字绝对值对应的二进制数据。以8位二进制为例,数字+5的原码为 00000101 ,-5的原码为 10000101 。但原码存在明显缺陷,一是零存在两种表达形式,正零为 00000000 、负零为 10000000 ,造成数值冗余;二是无法统一加减运算逻辑,减法不能直接通过加法电路实现,需要单独区分符号位和数值位处理,极大增加了计算机硬件的设计复杂度。

反码是为优化原码运算缺陷诞生的过渡性编码规则。编码规则区分正负:正数的反码与自身原码完全一致;负数的反码保留最高位的符号位不变,将剩余所有数值位进行按位取反处理,也就是0、1相互转换。同样以8位二进制举例,+5的反码依旧是 00000101 ,而-5的反码为 11111010 。不过反码并未彻底解决原码的核心问题,仍然存在正负双零的情况,反码中负零的编码为 11111111 。同时反码做加减运算时,容易出现进位溢出的问题,需要额外处理循环进位,运算效率依旧偏低。

补码是目前计算机通用的标准编码格式,也是Java整型数据的底层存储格式。其编码规则为:正数的补码、原码、反码三者完全相同;负数的补码,是在对应反码的基础上整体末尾加一,符号位保持固定,进位正常顺延。8位二进制下,+5补码为 00000101 ,-5补码为 11111011 。

posted @ 2026-09-25 17:55  朱家兴  阅读(3)  评论(0)    收藏  举报