【发布时间】:2019-05-29 20:05:43
【问题描述】:
我尝试搜索我的问题的答案... 这个表达式在 C 语言中的类型是什么?
unsigned short a, b;
a = 0x1;
b = 0x2;
if((a ^ b) > 0) //This expression...
...
我了解这不是一个完全正确的代码,可能会导致错误。我应该使用 != 代替 >。
我认为表达式结果的类型将是 unsigned int。我在 Stephen Pratt 的书中读到过。
如果我们有两种类型,那么涉及这些类型的表达式的结果必须是上级类型。 (整数或无符号整数)
如果这两个变量有任何其他值,这个表达式会小于零吗? (如果我们设置数字中的最高位,它将变为负数,前提是它具有带符号的数据类型)
我认为这是不可能的,但我可能是错的。 我猜了,但我想知道我的问题的正确答案。
【问题讨论】:
-
除非
INT_MAX小于USHORT_MAX,否则表达式将是int类型。因此,要拥有minimal reproducible example,您需要发布来自limits.h的相关值。 -
异或结果不能大于0xFFFF。谢谢。
-
你是怎么知道的?
-
unsigned short可以容纳的最大值不是0xFFFF,而是USHRT_MAX,其实现定义的值不小于65535。因此,该值可以更大。此外,INT_MAX的值也是实现定义的,可能低至32767。 -
你问的是哪个表达式,
a ^ b、(a ^ b)、(a ^ b) > 0,还是别的什么?
标签: c gcc types type-conversion