Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 负值左移0个位置?_C_Bit Shift - Fatal编程技术网

C 负值左移0个位置?

C 负值左移0个位置?,c,bit-shift,C,Bit Shift,在C语言中,负值的左移是未定义的行为。我遇到过两个使用Intel的ICC编译的库,其中删除了有问题的代码。同样的代码在Clang、Comeau、GCC和MSVC下也很好 该标准是否提到将负值左移0位?它也是未定义的吗 (我想知道的细节是0大小的移位,实际上根本不是移位。所以我想知道这种语言是否含糊不清,可以允许0大小的左移位)。摘自: 6.5.7位移位运算符 [……] 对每个操作数执行整数提升。结果的类型是 提升后的左操作数的值。如果右操作数的值为负或为 大于或等于提升后的左操作数的宽度,行为未

在C语言中,负值的左移是未定义的行为。我遇到过两个使用Intel的ICC编译的库,其中删除了有问题的代码。同样的代码在Clang、Comeau、GCC和MSVC下也很好

该标准是否提到将负值左移0位?它也是未定义的吗

(我想知道的细节是0大小的移位,实际上根本不是移位。所以我想知道这种语言是否含糊不清,可以允许0大小的左移位)。

摘自:

6.5.7位移位运算符

[……]

对每个操作数执行整数提升。结果的类型是 提升后的左操作数的值。如果右操作数的值为负或为 大于或等于提升后的左操作数的宽度,行为未定义。

E1的结果不是“它被定义了”的结论吗?毕竟,E1*1应该是可表示的。@harold:只有粗体文本处理有符号类型,在任何未定义的情况下(即使是0位),显式地进行负值移位。