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

问题描述 投票:1回答:1

我在Google上找到了一堆答案,但我仍然对这两个问题感到困惑:

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(二进制)。有没有一种方法可以在不转换为十进制且仅通过使用二进制的情况下进行此操作?

computer-science
1个回答
3
投票

“在计算机科学中,符号位是带符号的数字表示形式中的一位,指示数字的符号。仅带符号的数字数据类型具有符号位,并且其位置通常位于最左侧,即无符号数字中最高有效位所在的位置。 IEEE格式的浮点数始终带有符号,符号位位于最左侧。通常,如果符号位为1,则数字为负(对于2的补码整数)或非正数(对于1的补码整数,符号和幅度整数以及浮点数),而0表示a非负数”(http://en.wikipedia.org/wiki/Sign_bit

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

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

例如:-假设185和122是以符号幅度格式存储的带符号的8位十进制整数。计算185 +122。是否有上溢,下溢或都不存在?

答案:51和安全操作。怎么样?

185-> 1011 1001

由于最左边的位是1,所以它是负数。保留最高有效位1,这将使您拥有:

011 1001

现在,您要取2的补数,只需将每个0切换为1,将每个1切换为0,然后将结果加1。您将获得:

100 0111

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

185(-71)    ->      1011 1001

+122        ->      1000 0110

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

 051        ->      0011 0011

现在,这看起来似乎是错误的结果,但这是仅使用8位存储的限制,并且根据我们的计算机和带符号位表示的定义,实际上,这是在这种情况下所需的正确结果。

© www.soinside.com 2019 - 2024. All rights reserved.