二进制补码加法 -48-23.是否有必要使用8位表示形式?

问题描述

我用来解决此问题的方法是,我首先用2s补码形式写两个数字。 为此,我首先将48和23转换为二进制,然后对二进制表示形式进行补充并加1。

48 =(0110000),23 =(0010111){以二进制签名表示)

现在他们的二进制补码是-48 =(1010000),-23 =(1101001)。

现在我只添加它们:

enter image description here

现在在我的教科书中写到,最后一个进位1应该被丢弃。如果我放弃,那我得到错误的答案。如果我使用8位表示法而不是7位,则会得到正确的答案。

所以我的问题是为什么7位表示不能给出正确答案?是否有必要使用某些2 ^ n表示形式?

解决方法

您刚刚遇到的是经典的“溢出”问题。如果只有7位代表一个数字,则“正确答案”是无法表示的,因为它太大而无法容纳7位。当然,在理想情况下,您可能希望保留所有比特以确保您的答案正确,但这受到硬件的限制。这就是确定整数的最大值和最小值的方式(例如,对于32位有符号整数,为2,147,483,647)。

对于某些添加的信息,溢出检查在编程中很常见(在某些高级语言中自动执行,而在其他语言中则为手动),通常情况下,如果要添加两个具有相同符号(正/负)且最终结果相同的数字是相反的符号(因为删除了最高有效位),那么您就知道发生了溢出。