- 结论:当
x0≠x1
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;
}