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