这是我参与更文挑战的第2天,活动详情查看: 更文挑战
原码、反码、补码、移码
为方便表述,以一个字节8位来表示。
原码
原码就是把一个数转为二进制表示,把最高位变成符号位,如果是正数就设为0,负数就设为1
例如:+1 二进制表示为0000 0001,最高位变为符号位0,即0000 0001
-1 二进制表示为0000 0001,最高位表示为符号位,即1000 0001
那么有意思的就来了,+0和-0怎么表示呢?
+0用原码表示为0000 0000
-0用原码表示为1000 0000
好奇怪呀,同样是0却用原码表示出来不一样,这也是原码的一个缺点,这也为后面补码的出现埋下了伏笔。
在了解补码之前,我们首先学习什么是反码。
反码
正数的反码和原码相同。
负数的反码是原码保持最高位,即符号位不变,其余位按位取反。
例如:+1的反码和原码相同为0000 0001;
-1的原码为1000 0001,反码为1111 1110
学习完反码后在学习补码就容易很多了。
补码
正数的补码和原码相同;
负数的补码是其反码末位加1。
例如:+1的补码和原码相同为0000 0001
-1的补码为其反码加1 即1111 1111
此时你发现+0和-0的补码只有一个即 0000 0000(不防亲自动笔来验证一下这神奇的一幕。)数的一致性给补码的运算带来了极大的便利。
最后一个是移码,移码多用于浮点数的运算中。
移码
移码用于浮点数的运算中充当阶码,后面我会详细来讲浮点数的运算。
移码是补码的符号位取反得到。
例如:+1的补码为0000 0001,移码为1000 0001
-1的补码为1111 1111,移码为0111 1111
那么,原码,反码和补码的范围是多少呢? 大家可以参考下表
当n为8时
原码范围为 -127~127
反码范围为 -127~127
补码范围为 -128~127
你会发现补码的范围比原码和反码略大些,这是为什么呢?
原因就在于原码和反码+0和-0的表示不同,一次多占了一个编码位,这个大家只需要了解即可。
下期我会将数据的表示——浮点数的运算,也是重要的一节,欢迎大家前来指正。
以上就是原码,反码、补码和移码的概述,欢迎大家评论。如有错误,欢迎指正。