移位操作符
计算机底层的数据运算大多以二进制进行,所以作为一个程序员必须要了解移位运算,C语言中左移和右移运算分别用 << 和 >> 表示。
需要注意的是C语言中的位移操作是算数位移,即右移时,左边用原该值的符号位填充,右边丢弃。
与之相对的是逻辑移位,即左边用0填充,右边丢弃。
具体情况如下
#include <stdio.h>
int main(){
char a = 10;
a = a << 1;
printf("a = %d\n", a);
char c = -252;
/*
原码:11111100
反码:10000011
补码:10000100
*/
c = c << 1;
/*
原来补码:10000100
左移后 :00001000
原码 :00001000
十进制为:8
*/
printf("c = %d\n", c);
char b = -2;
/*
原码:10000010
反码:11111101
补码:11111110
*/
b = b >> 1;
/*
原来补码:11111110
右移后 :11111111
原码 :10000001
十进制为: -1
*/
printf("b = %d\n", b);
int d = 10;
d = d >> 1;
printf("d = %d\n", d);
return 0;
}