一、操作对象
移位操作符的操作数只能是整数,且是2进制补码
二、左移操作符:<<
左侧舍弃,右侧补0
例如 7 << 3
7的补码:00000000000000000000000000000111
7 << 3 左侧舍弃三位,右侧补三个0:00000000000000000000000000111000
int main() { printf("%d", 7 << 3); return 0; }
三、算数右移操作符:>>
(采用哪一种右移操作符取决于编译器,大多数编译器采用算数算数右移)
左侧补原符号位,右侧舍弃
例如 -7 >> 3
-7的补码:11111111111111111111111111111001
-7 >> 3 左侧补原符号位,右侧舍弃:11111111111111111111111111111111
转换为原码:100000000000000000000000000001
int main() { printf("%d", -7 >> 3); return 0; }
四、逻辑右移操作符:>>
左侧补0,右侧舍弃
例如 -7 >> 3
-7的补码:11111111111111111111111111111001
-7 >> 3 左侧补0,右侧舍弃:00011111111111111111111111111111
转换为原码:00011111111111111111111111111111
结果:536870911
int main() { printf("%d", -7 >> 3); return 0; }