为什么整数在内存中用补码表示,而不用原码和反码
1个回答
展开全部
为什么整数在内存中用补码表示,而不用原码和反码?
用补码存储整数,便于将两个数相减统一到加法中,保证结果是 正确的,因为 CPU 中只有加法器而无减法器。另外, 0 的补码形 式唯一,而其原码和反码都可以有两种表示,用两个不同的二进 制序列表达同一个整数,显然也是不合理的。 运算统一性举例:求 -2-3 ,即( -2 ) + ( -3 ) -2 的原码: 1000000000000010 -3 的原码: 1000000000000011 相加结果: 1 0 000000000000101 此结果中, 1 为多余位舍弃, 0 为符号位,因此计算结果为 +5 , 与实际不符合 -2 的反码: 1111111111111101 -3 的反码: 1111111111111100 相加结果: 1 1 111111111111001 此结果中, 1 为多余位舍弃, 1 为符号位,余下的 15 位取反再加 1 得到: 000000000000111 ,即绝对值为: 7 ,因此计算结果为 -7 ,与实际不符合 -2 的补码: 1111111111111110 -3 的补码: 1111111111111101 相加结果: 1 1 111111111111011 此结果中, 1 为多余位舍弃, 1 为符号位,余下 15 位取反再加 1 得到: 000000000000101 ,即绝对值为 5 ,因此答案为 -5, 是正 确的 在计算机应用基础课程或微机原理课程中,都有形式化的公式来 描述这种运算关系,这里只是通过一个特例来验证以补码形式存 储整数减法可理解为加上一个负数,对得到的结果我余进位舍 去,所得到的结果仍按补码理解就是正确的了。
用补码存储整数,便于将两个数相减统一到加法中,保证结果是 正确的,因为 CPU 中只有加法器而无减法器。另外, 0 的补码形 式唯一,而其原码和反码都可以有两种表示,用两个不同的二进 制序列表达同一个整数,显然也是不合理的。 运算统一性举例:求 -2-3 ,即( -2 ) + ( -3 ) -2 的原码: 1000000000000010 -3 的原码: 1000000000000011 相加结果: 1 0 000000000000101 此结果中, 1 为多余位舍弃, 0 为符号位,因此计算结果为 +5 , 与实际不符合 -2 的反码: 1111111111111101 -3 的反码: 1111111111111100 相加结果: 1 1 111111111111001 此结果中, 1 为多余位舍弃, 1 为符号位,余下的 15 位取反再加 1 得到: 000000000000111 ,即绝对值为: 7 ,因此计算结果为 -7 ,与实际不符合 -2 的补码: 1111111111111110 -3 的补码: 1111111111111101 相加结果: 1 1 111111111111011 此结果中, 1 为多余位舍弃, 1 为符号位,余下 15 位取反再加 1 得到: 000000000000101 ,即绝对值为 5 ,因此答案为 -5, 是正 确的 在计算机应用基础课程或微机原理课程中,都有形式化的公式来 描述这种运算关系,这里只是通过一个特例来验证以补码形式存 储整数减法可理解为加上一个负数,对得到的结果我余进位舍 去,所得到的结果仍按补码理解就是正确的了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询