真值:表示真实值的大小 例如:+123, -1011…
机器数:一个数在计算机中的二进制表示,最高位为符号位所以表示不了真实值的大小,例: 1101 = -5
原码:十进制数在计算机中的二进制表示,第一位为符号位(0正1负) 如:0010 1110…
计算机通过机器数进行运算,但是由于机器数存在符号位,所以在进行运算时,如果对符号相反的两数进行相加则会得到错误结果,如:1 + (-1) = 0转化为原码为 0001 + 1001 = 1010 = -2
由于正负相同数相加应该为0,所以人们想到将负数符号位不变 其余位取反 获得反码进行计算
反码:正数的反码还是原码;负数的反码,原码符号位不变,其余位取反 如 -1 :1001(原) 1110(反)
此时再将正负一进行相加则结果为负数的情况能正确计算出来
-2 + 1 = -1 1010(原) + 0001(原) = 1011(原) = -3 1101(反) + 0001(反) = 1110(反) = -1
但是当正负数大小相同时会出现正负零 以及结果为正数时结果不准确的问题
-1 + 2 = 1 1001(原) + 0010(原) = 1011(原) = -3 1110(反) + 0010(反) = 10000(反) = 0
-1 + 1 = 0 1001(原) + 0001(原) = 1010(原) = -2 1110(反) + 0001(反) = 1111(反) = -0
所以补码出现了,补码在反码的基础上再加上1即可
补码:正数的补码是原码,负数的补码是负数的反码加一。
-2 + 1 = -1 1110(补) + 0001(补) = 1111(补) = -1
-1 + 2 = 1 1111(补) + 0010(补) = 10001(补) = 1
-1 + 1 = 0 1111(补) + 0001(补) = 10000(补) = 0
笔记--原码,反码以及补码理解
最新推荐文章于 2023-01-07 22:33:39 发布