#include <stdio.h> int main() { int a=16; //a //00000000000000000000000000010000 //a>>1 //00000000000000000000000000001000 printf("%d\n",a>>1);//打印结果为8 return 0; }
左移操作符
左边丢弃。右边补0 例如:
1 2 3 4 5 6 7 8 9 10 11
#include <stdio.h> int main() { int a=6; //a //00000000000000000000000000000110 //a<<1 //00000000000000000000000000001100 printf("%d\n",a<<1);//12 return 0; }
注意:
移位运算符的操作数必须是整数
不要移动负数位
位操作符
&(按位与) |(按位或) ^(按位异或) 位操作符的操作数必须是整数 例:
1 2 3 4 5 6 7 8 9 10 11 12 13
//&按二进制位与 #include <stdio.h> int main() { int a=4; int b=6; int c=a&b; //00000000000000000000000000000100 //00000000000000000000000000000110 //00000000000000000000000000000100 printf("%d\n",c);//4 return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13
//|按二进制位或 #include <stdio.h> int main() { int a=4; int b=6; int c=a|b; //00000000000000000000000000000100 //00000000000000000000000000000110 //00000000000000000000000000000110 printf("%d\n",c);//6 return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14
//^按二进制位异或 //相同为0,不同为1 #include <stdio.h> int main() { int a=4; int b=6; int c=a^b; //00000000000000000000000000000100 //00000000000000000000000000000110 //00000000000000000000000000000010 printf("%d\n",c);//2 return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
//交换两个int变量,不能使用第三个变量 #include <stdio.h> int main() { int a=0; int b=0; scanf("%d%d",&a,&b); a=a^b; b=a^b; a=a^b; printf("a=%d,b=%d\n",a,b); return 0; } /* 36 96 a=96,b=36 */
赋值操作符
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>= 例如:
1 2 3 4
int a=10; a+=2;//相当于a=a+2 a>>=1;//相当于a=a>>1 a&=1;//相当于a=a&1