试图解析标准,最后一种情况似乎是我们有一个有符号和一个无符号操作数的情况,其中带符号的操作数具有更大的等级,但仍然不能适应较低等级的无符号操作数的整个范围 . 当我们在32位架构上有一个带符号的long和一个unsigned int时,似乎就是这种情况 . 标准说明如下:
否则,两个操作数都将转换为无符号整数类型,对应于带有符号整数类型的操作数类型 .
如果我正确地读了这个,那么
long a = -3;
unsigned int b = 2;
a + b;
在添加之前会导致 a
和 b
都被转换为无符号长吗?它是否正确?我没有要测试的32位机器,但是这意味着 a+b
应该具有值 ULONG_MAX
?这可能是对的吗?
1 回答
这意味着你的想法,根据引用的规则,两个操作数都被提升为
unsigned long
,参见live example(ideone显然是32位):结果: