1 << 31
在大多数平台(例如,具有16位或32位的系统int
)上是未定义的行为,因为其结果无法在int
(表达式的结果类型)中表示.不要在代码中使用该表达式.另一方面,1U << 31
在具有32位的系统上是有效表达式,int
因为其结果可在unsigned int
(表达式的结果类型)中表示.
在32位int
系统上,0x80000000
是一个(相对)大的正整数类型unsigned int
.如果你幸运(或不幸)足以让恶魔通过使用1 << 31
表达式飞出你的鼻子,这个表达式最可能的结果INT_MIN
是一个(相对)大的负整数类型int
.
1 << 31
在大多数平台(例如,具有16位或32位的系统int
)上是未定义的行为,因为其结果无法在int
(表达式的结果类型)中表示.不要在代码中使用该表达式.另一方面,1U << 31
在具有32位的系统上是有效表达式,int
因为其结果可在unsigned int
(表达式的结果类型)中表示.
在32位int
系统上,0x80000000
是一个(相对)大的正整数类型unsigned int
.如果你幸运(或不幸)足以让恶魔通过使用1 << 31
表达式飞出你的鼻子,这个表达式最可能的结果INT_MIN
是一个(相对)大的负整数类型int
.