二进制世界中,当一个数字有了极性需要表达正负的时候,人们根据手写+1,-1 的习惯自然的想到了对原数字多一位编码的方式来表达正负。即在原数字前增加一位代表正负的数字来表达该数的极性,0代表整数,1代表负数。
但这种Sign+Magnitiude的表达方式在直接进行正负数的运算时会出现问题。
比如说:
+5 = 0 101
-5 = 1 101
(+5) + (-5) = 0 101 + 1 101 = ? (非零)
问题源于即数制和码制的混淆。即符号位也参与到了运算,而符号位本身又不代表大小,没有权重,谨代表数的正负。
这时二进制的补码就出现了:1's complement(Diminished radix complement) 和 2's complement(radix complement).
两种补码区别在于 1's complement 有两个0:000 和 111 都是零;而 2's complement只有一个零。
注意由于各种表达方式都有表达范围的限制,运算结果可能出现overflow。解决方法就是在运算之前先了解运算数字的范围,留出足够的余量。
未完。。。
References:
文章评论(0条评论)
登录后参与讨论