关于原码、反码、补码的理解
在上学期学习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中,采用的是补码。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步