关于原码、反码、补码的理解

在上学期学习c语言c++的时候就接触到了原码、反码和补码这三个概念。

首先,我自己的理解,原码、反码和补码这三个概念都是基于二进制而言。

原码包括符号位和数值位,数值位就是真值的绝对值,符号位位“0”时表示正数,符号位为“1”时表示负数。这里就可以看出,原码的整数和小数中“0”的表示形式各有2种,“+0”和“-0”不一样,以8位机器数为例,整数的“+0”原码为0,0000000;整数的“-0”原码为1,0000000;小数的“+0”原码为0.0000000,小数的“-0”原码为1.0000000。

反码跟原码是正数时,一样;负数时,反码就是原码符号位除外,其他位按位取反。以8位机器数为例,整数的“+0”原码为0,0000000,反码为0,0000000;整数的“-0”原码为1,0000000,反码为1,1111111;小数的“+0”原码为0.0000000,反码为0.0000000;小数的“-0”原码为1.0000000,小数的“-0”反码为1.1111111。

补码,我认为就是因为在计算过程中因为使用原码会出错,所以引进了补码这个概念。补码是计算机把减法运算转化为加法运算的关键编码。正数的补码与其原码相同;负数的补码是在其反码的末位加1。

在Java中,采用的是补码。

猜你喜欢

转载自www.cnblogs.com/shumouren/p/11571756.html
今日推荐