dgn*_*uff 10 c++ bit-shift unsigned-long-long-int integer-promotion language-lawyer
如果其中一个是long long unsigned int,则另一个被提升为long long unsigned int
但是,如果我在MSVC下执行以下操作:
unsigned int a = <some expression>;
unsigned long long b = a << 32ULL;
Run Code Online (Sandbox Code Playgroud)
第二行生成以下警告:
warning C4293: '<<': shift count negative or too big, undefined behavior
Run Code Online (Sandbox Code Playgroud)
32ULL
是一个64位无符号值,因此根据隐式转换规则,这应该意味着a
转换unsigned long long
为.因此,我将64位值移位32位,显然是一个定义明确的操作.
MSVC是否有漏洞或者我的逻辑存在缺陷?
归档时间: |
|
查看次数: |
251 次 |
最近记录: |