gpt4 book ai didi

c - 结果的类型是什么?是否可以?

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

我尝试寻找我的问题的答案......这个表达式在 C 语言中的类型是什么?

unsigned short a, b;
a = 0x1;
b = 0x2;
if((a ^ b) > 0) //This expression...
...

我知道这不是一个完全正确的代码,可能会导致错误。我应该使用 != 代替 >.

我认为表达式结果的类型将是unsigned int。我在斯蒂芬·普拉特的书中读到过这一点。

如果我们有两种类型,那么涉及这两种类型的表达式的结果必须是高级类型。 (整数或无符号整数)

如果这两个变量还有其他值,这个表达式会不会小于零?(如果我们设置数字中的最高有效位,它会变成负数,前提是它具有有符号数据类型)

我认为这是不可能的,但我可能是错的。我做出了猜测,但我想知道我的问题的正确答案。

最佳答案

(a ^ b) > 0中,其中ab无符号短:

  • 如果 unsigned shortint 窄,则 ab 分别转换为 int (根据整数提升,C 2018 6.3.1.1 2,并且因为 unsigned Shortint 窄,必然意味着 int可以表示unsigned Short的所有值)。
  • 否则,ab 将转换为 unsigned int(同上)。
  • 对于 a ^ b,执行通常的算术转换 (6.5.11)。在此表达式中,通常的算术转换不会更改类型 (6.3.1.8 1)。同样,根据通常的算术转换,结果与转换后的操作数具有相同的类型。因此,结果是 intunsigned int,如上所述。
  • (a ^ b)a ^ b (6.5.1 5) 具有相同的类型。
  • 对于 (a ^ b) > 0,结果类型为 int (6.5.8 6)。

关于c - 结果的类型是什么?是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56367763/

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