2012-06-27 61 views
1

只是想了解一些有关签名与未签名的解释。我是对的,如果我说如果一个数是无符号整数,它的值通常是通过将二进制转换成十进制来计算的。但是当涉及到有符号整数时,首先标记符号位(msb),然后计算二进制值使用2的补码;计算的值是标有标记的实际值。签名与未签名的解释

我是对的还是缺少什​​么?

+0

我签署的病例是否只适用于带符号的负数? – user1466594

+0

在转换为“带有可选符号前缀的小数”的情况下,是的,它可以这样工作。该符号是分开查看的,并且绝对值(在此上下文中* *对int.minvalue存在,因为它是无符号的)被转换为十进制。 – harold

+0

非常感谢@harold :) – user1466594

回答

1

是的,你是对的。当将有符号整数代表代表2的补码构成十进制数字时,这是你怎么做的。和2的补码是英特尔处理器如何存储和使用带符号整数进行数学运算。

注意:但这个回答是而不是关于英特尔机器如何表示有符号整数。这是一般的。

您用于转换为十进制的技术实际上取决于硬件使用的表示。

硬件设计者可以选择存储有符号数为:

  1. 符号 - 幅度(1位指定标志,其他指定的大小,没有补)
  2. 1的补(其中,8位11111111代表-0,并00000000一个+0
  3. 2的补数(在通用硬件普及,英特尔等)
  4. ...(还有其他办法了。了解更多在Wikipedia article

而我们人类在阅读我们的首选小数形式时需要使用相应的“转换”。

例如如果你设计的硬件主要是乘法运算,那么以符号数量形式存储带符号整数会有一定意义。你只是分别乘以符号和大小。另一方面,2的补码是a little unwieldy to multiply, but not much

当然,2的补码是大多数硬件(当今几乎所有通用CPU)存储有符号数的方式。这使得添加一块蛋糕。

+0

谢谢@ArjunShankar – user1466594

+1

你不必做2的补码乘法的跛脚的方式,虽然 - 下半部分只是一个常规的乘法,并有一些技巧的上半部分(我忘了什么技巧,确切地说,真的,你在课堂外需要多久?)。无论如何,有比符号幅度更好的方式来存储为乘法优化的整数(例如RNS) – harold

+1

@harold - 正确。我的意图是给出一个简单的解释,同时保持有不同的表示可用。 “修正的Baugh-Wooley乘数”就是将2的补数相乘的一种方法。我最近建立了其中一个作为LEON3单周期乘数的替代品:) – ArjunShankar

0

您所描述的是将带符号的二进制整数转换为带有十进制数字的可读字符串的最典型方法。

但是,这不是唯一的方法。您可以先将2的补码负3位值111转换为“7”,然后从中减去“8”并到达“-1”。

+0

感谢@alex :) – user1466594

+3

请记住,upvote并接受有用的答案。 –