java语言基础(6)——原码反码补码以及二进制的负数运算
在计算机内部,对数据运算时,都是操作的数据的补码。但补码又跟原码反码有着密切的关系,所以我们就有必要对原码反码补码进行一次清晰的梳理。
原码:
就是二进制定点表示法,即最高位为符号位,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
在运算的过程中,补码的符号位和数值位统一参与运算。
版权声明
本文仅代表作者观点,不代表博信信息网立场。