Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 隐式转换:以下警告有效吗?_C++_Language Lawyer_Bit Shift_Integer Promotion_Unsigned Long Long Int - Fatal编程技术网

C++ 隐式转换:以下警告有效吗?

C++ 隐式转换:以下警告有效吗?,c++,language-lawyer,bit-shift,integer-promotion,unsigned-long-long-int,C++,Language Lawyer,Bit Shift,Integer Promotion,Unsigned Long Long Int,这个问题(和其他几个问题)说明了 如果其中一个为long-long unsigned int,则另一个提升为long-long 无符号整数 但是,如果我在MSVC下执行以下操作: unsigned int a = <some expression>; unsigned long long b = a << 32ULL; 无符号整数a=; 无符号长b=a移位不会进行所谓的“常规算术转换”,这是您引用的规则。移位的结果是。移位是特殊的。Visual Studio 2015。

这个问题(和其他几个问题)说明了

如果其中一个为long-long unsigned int,则另一个提升为long-long 无符号整数

但是,如果我在MSVC下执行以下操作:

unsigned int a = <some expression>;
unsigned long long b = a << 32ULL;
无符号整数a=;

无符号长b=a移位不会进行所谓的“常规算术转换”,这是您引用的规则。移位的结果是。

移位是特殊的。Visual Studio 2015。也就是说,我99.9%肯定我们在升级之前收到了与VS 2010相同的警告,而VS 2017的快速测试也给出了相同的警告。这需要语言律师标签。这就是“常用算术转换”和“积分提升”之间的细微差别。它们是不同的东西,但两者都会发生,并且都可能转换值。通过从a到b的赋值,然后将b移位,可以绕过这个问题吗?
warning C4293: '<<': shift count negative or too big, undefined behavior