gpt4 book ai didi

c - ARM 处理器如何区分负数和正数?

转载 作者:行者123 更新时间:2023-11-30 18:16:24 25 4
gpt4 key购买 nike

让我们考虑使用 8 位处理器来简化我的问题。我知道 -2 被存储为其 2 的补码,即 0b1111_1110,该数据 block 的十进制表示形式是 254,对吗?现在,我的问题是 ARM 处理器如何区分“-2”和“254”,因为它们的二进制表示相同?

我尝试查找整个互联网,每个人都在解释处理器如何存储负数的方式。我只需要知道它们是如何区分的。

最佳答案

-2 is stored as its 2's complement which is 0b1111_1110 the decimal representation of this chunk of data is 254, right-?

是的,对于典型的现代系统来说确实如此。

Now, my question is how will ARM processors differentiate between a "-2" and a "254" since both their binary representation is same ?

处理器没有;编译器会这样做。

假设您有表达式value > 0。变量value和常量0都有类型。根据这些类型,编译器选择要使用的 CPU 指令。因此有符号和无符号比较可能会导致不同的编译器输出。

处理器不知道代码中的类型。它只是执行这些选定的指令。

Example with ARM64 gcc :

int icmp(int num) {
return num > 0;
}

int ucmp(unsigned int num) {
return num > 0;
}
icmp:
sub sp, sp, #16
str w0, [sp, 12]
ldr w0, [sp, 12]
cmp w0, 0
cset w0, gt
and w0, w0, 255
add sp, sp, 16
ret
ucmp:
sub sp, sp, #16
str w0, [sp, 12]
ldr w0, [sp, 12]
cmp w0, 0
cset w0, ne
and w0, w0, 255
add sp, sp, 16
ret

了解编译器如何生成略有不同的 cset 指令。

关于c - ARM 处理器如何区分负数和正数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57918753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com