只是想了解有关已签名与未签名解释的信息。如果我说如果一个数字是无符号整数,它的值是通过将二进制转换为十进制来正常计算的,我对吗?但是当涉及有符号整数时,首先记下符号位(msb)然后计算二进制值使用 2 的补码;计算的值是带有符号的实际值。
我是对的还是遗漏了什么?
只是想了解有关已签名与未签名解释的信息。如果我说如果一个数字是无符号整数,它的值是通过将二进制转换为十进制来正常计算的,我对吗?但是当涉及有符号整数时,首先记下符号位(msb)然后计算二进制值使用 2 的补码;计算的值是带有符号的实际值。
我是对的还是遗漏了什么?
是的你是对的。将以2 的补码形式表示的有符号整数转换为十进制数时,您会这样做。2 的补码是英特尔处理器如何存储和使用有符号整数进行数学运算。
注意:但这个答案与英特尔机器如何表示有符号整数无关。这是一般的。
您用于转换为十进制的技术实际上取决于硬件使用的表示形式。
硬件设计人员可以选择将带符号的数字存储为:
11111111
表示 a-0
和00000000
a +0
)我们人类在阅读我们喜欢的十进制形式时需要使用相应的“转换”。
例如,如果您正在设计主要进行乘法运算的硬件,则以符号大小形式存储有符号整数会很有意义。您只需将符号和大小分别相乘。另一方面,2 的补数乘起来有点笨拙,但并不多。
当然,2 的补码是大多数硬件(当今几乎所有通用 CPU)存储有符号数的方式。这使得添加小菜一碟。
您所描述的是将带符号的二进制整数转换为具有十进制数字的人类可读字符串的最典型方法。
然而,这不是唯一的方法。您可以先将 2 的补码负 3 位值 111 转换为“7”,然后从中减去“8”并得到“-1”。