<< 左移操作符
>> 右移操作符
注意:移位操作符的操作数是整数。(是整数在内存中补码的形式
)
1.左移操作符:
左边抛弃,右边补0。
#include <stdio.h>
int main()
{
int a = 5; //由于a=5,a是正数所以a的原码,反码,补码相同
//a=5 原码 00000000000000000000000000000101
// 反码 00000000000000000000000000000101
// 补码 00000000000000000000000000000101
int b = a << 1; //位操作符的对象是内存里面的反码形式
//a=5 补码 00000000000000000000000000000101 左边抛弃,右边补0
//移位符操作后补码 00000000000000000000000000001010 由于补码的首位是0,所以它的原码,反码,补码相同
//移位符操作后反码 00000000000000000000000000001010
//移位符操作后原码 00000000000000000000000000001010
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
2.右移操作符:
(1)算术移位:左边用原数值的符号位代替,右边丢弃。(大多数编译器使用 的)
(2)逻辑移位:左边用0补充,右边丢弃。
#include <stdio.h>
int main()
{
int a = -1; //原码 10000000000000000000000000000001
//反码 11111111111111111111111111111110
//补码 11111111111111111111111111111111
int b = a >> 1; //移位后 11111111111111111111111111111111
return 0;
}