我尝试了下面的代码,在这两种情况下,即(左移和右移)我得到的输出为 0
#include <bits/stdc++.h> using namespace std; int main() { int a=20; a=a<<-1; cout<<a; int x=20; x=x>>-1; cout<<x; return 0; }
移动负值会触发代码中的未定义行为。这是在 C++ 标准第 8.8p1 节中指定的:
如果右操作数为负或更大,则行为未定义 大于或等于提升的左操作数的位长度