学堂 学堂 学堂公众号手机端

java语言基础(6)——原码反码补码以及二进制的负数运算

lewis 1年前 (2024-04-20) 阅读数 14 #技术


在计算机内部,对数据运算时,都是操作的数据的补码。但补码又跟原码反码有着密切的关系,所以我们就有必要对原码反码补码进行一次清晰的梳理。




原码:


就是二进制定点表示法,即最高位为符号位,0表示正,1表示负,其余位表示数值的大小。



反码:


正数的反码与其原码相同;负数的反码对其原码逐位取反,但符号位除外。



补码:


正数的补码与其原码相同,负数的补码是在其反码的末位加1。


为什么要用补码运算:

——摘自百度百科《补码》

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。


1、一个负整数(或原码)与其补数(或补码)相加,和为模。


2、对一个整数的补码再求补码,等于该整数自身。


3、补码的正零与负零表示方法相同。


——摘自百度百科《补码》


关于为何使用补码的具体细节,请移步百度百科《补码》


二进制数值运算实例:

加法很容易理解,因为正数的原反补码都相同此处省略。而减法则涉及到负数,此处记录两个实例,给自己以后提个醒。

3-2=1

3-2等价于 3+(-2)

我们先得到对应数字的补码

3(原码) 00000011

3(反码) 00000011

3(补码) 00000011

-2(原码) 10000010

-2(反码) 11111101

-2(补码) 11111110

运算结果为 00000001

此结果为数值的补码表示,最高位为0表示此数为正数,

正数的原反补码都相同,所以结果就是为1

3-4=-1

3-4等价于3+(-4)

3(原码) 00000011

3(反码) 00000011

3(补码) 00000011

-4(原码) 10000100

-4(反码) 11111011

-4(补码) 11111100

运算结果为 11111111

此结果是数值的补码,最高位为1表示此数是负数,

转换为原码则为 10000001,结果为-1

在运算的过程中,补码的符号位和数值位统一参与运算。




版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门