gpt4 book ai didi

c - 有符号无符号减法

转载 作者:太空狗 更新时间:2023-10-29 15:46:38 26 4
gpt4 key购买 nike

我最近决定迈出一大步,阅读了一堆计算机科学书籍,以便更好地为 future 做好准备。

目前我正在阅读将有符号小数转换为无符号小数。我理解大多数情况(希望它最终变得更容易),但在以下方面苦苦挣扎(在 32 位中):

-2147483647-1U <-2147483647

根据这本书,这评估为真。关于这一点,我仍在苦苦挣扎,因为我不明白为什么它会这样评估。

根据我的理解,我知道由于第一个数字被转换为无符号,因此在此计算中它们都被转换为无符号值。因此,第一个数字在减法之后是 -2147483648,然后转换为无符号数,还是在减法之前发生无符号转换?

很抱歉这篇文章很长,只是想让我的头脑理解这一点。

谢谢!

最佳答案

The first number is therefore -2147483648 after subtraction

不完全是。对于 -2147483647-1U,首先转换为 unsigned。使用混合的 int/unsigned 数学,int 被转换为 unsigned

int 中减去 unsigned 结果是 unsignedunsigned 永远不会是负数。


-2147483647-1U < -2147483647

假设 32 位或更宽的 unsigned/int

-2147483647-1U 是一个 int 减去一个 unsigned,所以 -2147483647 被转换为 unsigned 2147483649 区别是unsigned 2147483648。现在 unsignedint 进行比较,因此 int 被转换为 unsigned 2147483649。左边小于右边,所以结果为真。


[编辑]

假设比 32 位 unsigned/int 窄,但 long 使用常见的 2 的补码编码。在 2017 年的嵌入式 8/16 位处理器中经常看到。

-2147483647-1U 是一个 long 减去一个较窄的 unsigned,所以 -2147483647 仍然是一个 long1U 被转换为int 1,区别是long -2147483648。现在 longlong 进行比较。左边小于右边,所以结果为真。

关于c - 有符号无符号减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46205900/

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