gpt4 book ai didi

c - 提升为 unsigned 是在结果上还是在每个操作数上完成?

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:32 26 4
gpt4 key购买 nike

在以下内容中:
2147483647U > -2147483647 - 1 由于转换/提升为无符号,它将评估为 false。
我的问题是它将如何推广?
是先进行减法运算,然后将结果提升为无符号,还是将每个操作数提升为无符号?
有符号的 4 位 [-8,7] 和无符号的 [0,15] 的示例:
7U > -7 -1
这会变成 (unsigned)(-7) + (unsigned)(-1) = (9U) + (15U) = 24U
所以我们最终得到 7U > 24U,这是错误的。
或者我们会有
-7-1 = -8 = 8U
所以 7U > 8U 这是错误的

最佳答案

这个表达式

2147483647U > -2147483647 - 1

有两个运算符,其中减号的优先级高于逻辑 >。

所以首先有计算子表达式

-2147483647 - 1

两个操作数的类型都是 int。这是他们常见的类型。因此,不会进行任何促销。你会得到

-2147483648

然后表达式

2147483647U > -2147483648

被评估。

这里常见的类型是unsigned int。 signed 和 unsigned int 具有相同的级别,但在这种情况下,通用类型是 unsigned int。

在这个表达式中,右操作数的内部表示被简单地解释为未签名的值。因此,如果它大于左操作数,则结果将为 false。

如果考虑这个例子

7U > -7 -1

那么 -7 - 1 将等于 -8。 -8的内部表示是

1000

作为无符号整数,它等于 8。因此

7u > 8u

等于假。

关于c - 提升为 unsigned 是在结果上还是在每个操作数上完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001824/

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