我知道SO上有很多类似的问题。在称其为重复之前请仔细阅读。如果是的话,我很乐意获得相关问题的参考。
在我看来,clang 消毒程序正在抱怨无符号数字的完全有效的左移。
int main()
{
unsigned int x = 0x12345678;
x = x << 12;
return 15 & x;
}
Run Code Online (Sandbox Code Playgroud)
编译如下:
clang -fsanitize=undefined,integer shift-undefined.cpp -lubsan -lstdc++
结果出现此错误:
shift-undefined.cpp:4:11: runtime error: left shift of 305419896 by 12 places cannot be represented in type 'unsigned int'
我知道有些位会被遗忘,但我认为这对于无符号数字是合法的。是什么赋予了?