这个问题隐式类型转换规则在 C++ 运算符(和其他几个)状态
如果其中一个是 long long unsigned int,则另一个提升为 long long unsigned int
但是,如果我在 MSVC 下执行以下操作:
unsigned int a = <some expression>;
unsigned long long b = a << 32ULL;
第二行生成以下警告:
warning C4293: '<<': shift count negative or too big, undefined behavior
32ULL
是一个 64 位无符号值,因此根据隐式转换规则,这应该意味着a
也转换unsigned long long
为。因此,我将 64 位值移动了 32 位,这显然是一个定义明确的操作。
MSVC 有问题还是我的逻辑有缺陷?