Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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++;:按位移位的零值_C++_Bit Manipulation - Fatal编程技术网

C++ C++;:按位移位的零值

C++ C++;:按位移位的零值,c++,bit-manipulation,C++,Bit Manipulation,一个愚蠢的问题。我只是做了一些测试。我的期望是: uint32_t v = ~ (uint32_t) 0; v <<= sizeof(uint32_t) * 8; uint32\u t v=~(uint32\u t)0; v你处于膝盖深的未定义行为中: 在任何情况下,如果右操作数的值为负数或 大于或等于提升后的左操作数中的位数, 该行为未定义 按类型宽度(或更多)移位是未定义的行为启用优化以在结果上重新掷骰子您的编译器应该给您警告:您应该从gcc 8.3中得到警告,这里没有什么争议

一个愚蠢的问题。我只是做了一些测试。我的期望是:

uint32_t v = ~ (uint32_t) 0;
v <<= sizeof(uint32_t) * 8;
uint32\u t v=~(uint32\u t)0;

v你处于膝盖深的未定义行为中:

在任何情况下,如果右操作数的值为负数或 大于或等于提升后的左操作数中的位数, 该行为未定义


按类型宽度(或更多)移位是未定义的行为启用优化以在结果上重新掷骰子您的编译器应该给您警告:您应该从gcc 8.3中得到警告,这里没有什么争议,大多数处理器在移位32/64位值时移位5/6位。ARM是一个例外-它使用8位(当参数在寄存器中时)。这可能就是Java和C明确指定相同行为的原因。
size_t v = ~ (size_t) 0;
v <<= sizeof(size_t) * 8;