• 结论:当 x0x1 x 0 ≠ x 1 时,也就是符号位最高位不相等时,补码进行算术左移,溢出。
#include <bits/stdc++.h> 
#define BUG(x) cout<<#x<<":"<<x<<endl;
using namespace std;

int main(){
    int a=0b10000000000000000000000000000000;
    BUG(a) 
    BUG((a>>1)) //说明c语言的移位执行的是算术移位 
    BUG((a<<1)) //说明x[0]!=x[1],也就是最高位与符号位不一样时进行左移操作,会溢出 
    return 0;
}

补码算术左移溢出的条件_补码