一:<<(左移操作符)
移位规则:左边抛弃,右边补0;
二:例子详解
正数了解
7
为例子 整数7(4字节*8bit位)
了解(正整数原码反码补码相同)
原码00000000000000000000000000000111
反码00000000000000000000000000000111
补码00000000000000000000000000000111
正数移位代码
int main()
{
int a = 7;
int b = a << 1;//表示移一位 //移位是移位补码以原码的方式呈现//补码:00000000000000000000000000001110
//反码:00000000000000000000000000001110
//原码:00000000000000000000000000001110 //也就是14
printf("%d\n",a);//7移位规则:左边抛弃,右边补0;
printf("%d", b);//14
return 0;
}
负数了解
-7展示
原码10000000000000000000000000000111(最高位(符号位)为0则是整数最高位为1则为负数)
反码11111111111111111111111111111000(原码符号位不变其他位按位取反)
补码11111111111111111111111111111001(反码加1就是补码)
负数移位代码
int main()
{
int a = -7;
int b = a << 1;//左移后
//补码:111111111111111111111111111110010 //减1为反码
//反码:111111111111111111111111111110001
//原码:10000000000000000000000000001110 //为-14
printf("%d\n", a);//-7
printf("%d", b);//-14
return 0;
}
二: >>(右移操作符)
移位规则: 1;逻辑移位;左边补0,右边丢弃
2;算术移位;左边用原该值的符号位填充,右边丢弃自行在编译器上了解
三 :注意事项
1:移位也不要为负数位,这个是标准未定义
2:移位操作符的操作数只能是整数