Why does MSVC pick a long long as the type for -2147483648?
我的片段:
1 2 3
| auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here. |
编译器声明文字i是long long。 这是为什么? -2147483648适用于MSVC x64上的int。
我的编译器是MSVC,目标是64位。
-
相关的将最小的32位整数(-2147483648)强制转换为浮点数会给出正数(2147483648.0),为什么0 <-0x80000000 ?,(-2147483648> 0)在C ++中返回true?
-
为了好玩,请查找INT_MIN的编译器定义。 即使INT是32位,出于这个原因,INT_MIN也没有定义为(-2147483648)。
-
我很犹豫地关闭了上一个问题的副本; 欢迎意见。
-
相关:stackoverflow.com/questions/34724320/
与流行的看法相反,-2147483648不是文字:C ++不支持负文字值。
实际上,它是一个编译时可评估的常量表达式,由文字2147483648的一元否定组成。
在具有32位int和long的MSVC x64上,2147483648对于任何一个都太大了,因此它会故障转移到您观察到的long long类型。
-
@ P45Imminent,我们在30分钟前的C标签中遇到了同样的问题,以重复形式关闭。
-
@ P45Imminent,这是我正在谈论的问题:stackoverflow.com/questions/34724320/
-
我刚刚投票赞成那个。 顺便说一句,我不在学校。 我和拔示巴一起工作。 但是那个似乎变成了漫长的。
-
那是平台差异。 如果平台具有32位int和64位长(如64位linux一样),则2147483648将被解释为long。 如果平台的长度为32位(如64位窗口一样),则2147483648将被解释为long long(标准要求long long至少为64位)。
-
问题本身实际上包含了OP遗漏的重要线索,即i是字面意义!