Computer science 如何在不转换为二进制的情况下以符号大小格式添加两个数字

Computer science 如何在不转换为二进制的情况下以符号大小格式添加两个数字,computer-science,Computer Science,我在谷歌上搜索了一大堆答案,但我仍然停留在这两个问题上: 3.6假设185和122是无符号8位十进制整数。计算185–122。是否有溢出、下溢或两者都没有 3.7假设185和122是以符号大小格式存储的有符号8位十进制整数。计算185+122。是否有溢出、下溢或两者都没有 因此,3.6首先: 所以185表示为10111001,如果它是一个无符号二进制数。122是01111010,作为一个无符号数。进行减法运算时: 10111001 01111010 00111111 但我被困在3.7上了 所以

我在谷歌上搜索了一大堆答案,但我仍然停留在这两个问题上:

3.6假设185和122是无符号8位十进制整数。计算
185–122
。是否有溢出、下溢或两者都没有

3.7假设185和122是以符号大小格式存储的有符号8位十进制整数。计算
185+122
。是否有溢出、下溢或两者都没有

因此,3.6首先: 所以185表示为10111001,如果它是一个无符号二进制数。122是01111010,作为一个无符号数。进行减法运算时:

10111001
01111010
00111111
但我被困在3.7上了

所以我认为185的有符号数是
10111001=-57
。首先是这样吗?但如何将其添加到01111010

除了转换为十进制->做数学->将答案重新转换为二进制之外,我还有点纠结于如何用其他方法来实现这一点。我在互联网上到处找了找,但找不到好的资源……那么,当数字是有符号的数字格式时,如何添加数字呢。为了澄清…当我们说有符号的量值时,我们不是指一补或二补。所以问题是185+122。在有符号格式中,185是10111001,如果最大幅度位是1,则为负,因此10111001=-57。122是01111010=122。所以把它们加在一起就是65=01000001。有没有一种方法可以不用转换成十进制,只使用二进制就可以做到这一点

在计算机科学中,符号位是有符号数字表示中的一位,表示数字的符号。只有有符号的数字数据类型才有符号位,它的位置通常是最左侧,即无符号数字中最重要的位所在的位置。IEEE格式的浮点数总是有符号的,符号位位于最左侧。通常,如果符号位为1,则数字为负数(对于两个的补码整数)或非正数(对于一个的补码整数、符号和幅度整数以及浮点数),而0表示非负数()

N位可以表示–(2^(N-1)-1)到(2^(N-1)-1)

现在,就你的问题而言,我建议你使用计算机用来执行二进制数减法的相同方法,即2s补码形式的加法。你可以使用直接减法,但不可取

例如:- 假设185和122是以符号大小格式存储的有符号8位十进制整数。计算185+122。是否有溢出、下溢或两者都没有

回答:51和安全操作。怎么做

185->10111001

因为最左边的位是1,所以它是负数。保留最高有效位,即1,这将为您留下:

0111001

现在,您需要取2的补码,只需将每0切换到1,每1切换到0,然后将一个添加到结果中。您将获得:

1000111

因此,根据我们的计算机程序,185->1100 0111(-71)为8位有符号表示。因此185+122作为8位整数的解实际上是-71+122=51

185(-71)    ->      1011 1001

+122        ->      1000 0110

-----------------------------

 051        ->      0011 0011

现在,这似乎是一个不正确的结果,但这是仅使用8位存储的限制,根据我们的计算机和符号位表示的定义,这实际上是,在这种情况下需要正确的结果。

但问题希望我以符号大小格式进行,而不是两个补充。我已在灰色部分的末尾以符号大小格式提供了解决方案。我使用2s补码格式只是为了验证我们得到的结果是否正确。