1.位操作符
PS:进行位操作前,必须先化为二进制来进行相应操作。
位操作符 | 名称 | 特点 | 例子 |
---|
| | 按位"或" (OR) | 一真则真 | int a=5; //0101 int b=6; //0110 int c=a | b; //0111 | & | 按位"与"(AND) | 一假则假 | int a=5; //0101 int b=6; //0110 int c=a & b; //0100 | ^ | 按位"异或"(XOR) | 相同为0,相异为1 | int a=5; //0101 int b=6; //0110 int c=a ^ b; //0011 | ~ | 按位"取反"(NOT) | x的按位翻转是-(x+1) | int a=5; a=^a;//a=-(5+1)=-6 | << | 数据左移 | 5<<2 向左移动2 位 | int b=5;//0101 b=b<<5;//010100 | >> | 数据右移 | 5>>2 向右移动2 位 | int b=5;//0101 b=b>>5;//0001 |
2.逻辑操作符
&& | || |
---|
逻辑"与" | 逻辑"或" | 两个操作数同时为真才为真 如果左 边的操作数为假,则不会运行 右边的操作数 | 两个操作数同时为假才为假 >如果左边的操作数为真 ,则不会运行 右边的操作数 | 例如: int m=2,n=1,a=1,b=2,c=3,d; d=(m=a==b)&&(n=b>c);//m=a== b为假, 所以n=b>c不会运行,所以n的值不变 printf("%d,%d,%d",m,n,d);//得到结果0,1,0 | 与左边同理 |
3.单目运算符
名称 | ! | & | * |
---|
特点 | 不为0则变1,为0则变1 | 取变量的地址 | 取指针所指向变量的内容 | 例子 | int a=2,b=0; a=!a;b=!b;//a=0,b=1 | int a=5; int *p=&a; //&p取p的地址 | int a=5; int *p=&a; //*p=5,取内容 | 结合性 | 自右向左 | 自右向左 | 自右向左 |
|