【发布时间】:2020-01-15 01:00:48
【问题描述】:
让我们考虑一个 8 位处理器来简化我的问题。我知道 -2 存储为它的 2 的补码,即 0b1111_1110,这个数据块的十进制表示是 254,对吗?现在,我的问题是 ARM 处理器如何区分“-2”和“254”,因为它们的二进制表示是相同的?
我尝试查找整个互联网,每个人都在解释处理器如何存储负数的方式。我只需要知道它们是如何区分的。
【问题讨论】:
-
你需要知道2的恭维,这就是cpu用来表示有符号数的方式。
-
下面有很多很好的答案。有符号与无符号是程序员关心的,而不是处理器(ARM 与这里无关,每个处理器都有处理这个问题的方法)。加减法不受影响,他们无法区分有符号和无符号,二进制补码的美丽。由于符号扩展,乘法关心。 N * N 位结果的低 N 位不受影响,但由于需要 2*N 位来完全存储该结果,结果的高 N 位不同。所以你需要一个有符号和无符号的乘法,或者用另一种方式解决它,你可以。除法类似。
-
如果您需要我们中的一个可以展示这种铅笔和纸样式,长除法,长乘法,您可以在其中看到所有的位。一旦你看到了,你就可以将它应用到每个单独的指令集。 ARM、x86 等
标签: c arm embedded processor firmware