Compiler construction 有符号整数-最左边位有符号位的优点

Compiler construction 有符号整数-最左边位有符号位的优点,compiler-construction,integer,sign,signed,Compiler Construction,Integer,Sign,Signed,我知道,对于有符号整数,有一个符号位通常位于最左边的位,它有一个0或1来显示整数是负数还是正数 我试着到处找,但找不到我问题的答案 将最左边的位作为符号位与最右边的位或任何其他位相比有什么优势吗? 还是本质上是一样的?优点在于,对于有符号整数和无符号整数,位/值的对齐方式保持不变 值为10的有符号整数等于无符号整数值10。因为相同的排列。 如果将符号位置于右侧,则这些值将不同。优点是,对于有符号整数和无符号整数,位/值的对齐方式保持不变 值为10的有符号整数等于无符号整数值10。因为相同的排列。

我知道,对于有符号整数,有一个符号位通常位于最左边的位,它有一个0或1来显示整数是负数还是正数

我试着到处找,但找不到我问题的答案

将最左边的位作为符号位与最右边的位或任何其他位相比有什么优势吗?
还是本质上是一样的?

优点在于,对于有符号整数和无符号整数,位/值的对齐方式保持不变

值为10的有符号整数等于无符号整数值10。因为相同的排列。
如果将符号位置于右侧,则这些值将不同。

优点是,对于有符号整数和无符号整数,位/值的对齐方式保持不变

值为10的有符号整数等于无符号整数值10。因为相同的排列。
如果将符号位放在右边,这些值将不同。

小心,大多数计算机整数实际上并不使用符号位本身,而是使用所谓的符号位以符号方式存储数字。然而,当一个数字为负数时,2的补码将导致“最左边”,或者更具体地说,“最高有效”位设置为
1

长话短说,通过使用2的补码方法对整数值进行编码,处理器上的数学处理单元可以使用一些很酷的技巧来加速加减运算的处理。例如,可以使用与标准加法相同的硬件逻辑将负2的补码数添加到正2的补码数,而符号位不允许这样做

另一种表示有符号整数的系统是。直接理解1的恭维语中的数字(对我们人类来说)更简单,因为要在1的恭维语中存储负数,只需翻转所有位。请注意,从技术上讲,仍然没有符号位,即使当数字为负数时,最高有效位始终为1,或当数字为非负数时,最高有效位始终为0(下文解释的情况除外)。这里的优点是,与仅使用直符号位相比,再次简化了数字算术运算的硬件逻辑

使用符号位的数字确实会遇到一个问题,1的恭维确实会遇到这个问题,那就是它可以通过两种方式存储数字
0
。对于8位示例,1的补充中的
0
可以存储为
1111111
0000
。本质上,这意味着您可以将
0
存储为正值和负值,任何数学家都会告诉您这是没有意义的。本质上,
0
没有正负号。它只是
0
。计算机科学家会看着数学家说“那又怎样”,因为这只是意味着我们需要处理逻辑中的一个特殊情况,以两种方式存储
0
。幸运的是,
0
是唯一存在此问题的数字,但是我们真的想总是检查我们的结果是否是两个可能答案之一吗?即使这是在硬件级别完成的,并且对程序员隐藏(这会降低计算速度,即使只是略微降低)

正如我前面提到的,使用符号位会遇到与1的恭维相同的正/负
0
问题,并且它需要硬件逻辑中更大的一组特殊情况,这使得使用这种存储方法既容易混淆(在
0
的情况下)又昂贵(在时间和物理硬件逻辑方面)用于存储有符号的数字

尽管如此,仍然有一个问题是“为什么是最左边的一位?”归根结底,这是哲学家们的一个问题。最终,在硬件层面上,使用最高有效位没有明显的优势。管理数字所需的任何硬件逻辑并不因位的位置而复杂。就硬件而言,位可能在中间。实际上,硬件电路。实际上可以用中间最重要的位来布局,但逻辑上它是在左边。但是问问自己,它有意义吗?在美国,我们通常写负数La <代码> -244521 < /Cord>,左边是负号。为什么不把符号位放在左边?< /P> 事实上,在讨论如何在内存中存储大于8位的数字时,这场辩论存在于一个更高的层次。你可以找到无数关于数字类型的讨论,以及哪一个更好。最后,这只取决于你试图完成什么,但这超出了你的问题范围


撇开哲学不谈,如中所述,将符号位放在最左边的位确实会在有符号和无符号的数字之间提供一种自然的对齐方式,这通常对我们迟钝的人脑是一件好事。

注意,大多数计算机整数实际上并不使用符号位本身,而是使用所谓的符号位来存储数字时尚。但是,当数字为负数时,2的补码将导致“最左边”,或者更具体地说,“最高有效”位设置为
1

长话短说,通过使用2的补码方法对整数值进行编码,处理器上的数学处理单元可以使用一些很酷的技巧来加速加减运算的处理。例如,可以使用与stand相同的硬件逻辑将负2的补码数添加到正2的补码数ard加法,而符号位不允许这样做

另一种表示有符号整数的系统,但不经常使用(需要引用)是