C语言中的位运算符:
char a = 1;
char b = 0;
- 按位取反:~ printf("%d\n", ~a);//-2
- 按位与:&(逻辑乘法):遇0则0 printf("%d\n", a & b);//0
- 按位或:|(逻辑加法):遇1则1 printf("%d\n", a | b);//1
- 按位异或:^:相同为0,不同为1; 变来变去,也只有以下四种情况,所以异或两次还是相同的。不同变相同<-->相同变不同,不同变不同<-->不同变不同,相同变相同<-->相同变相同,相同变不同<-->不同变相同。
- 左移:<< *2的n次幂 printf("%d\n", a << 2);//4
- 右移:>> /2的n次幂 printf("%d\n", a >> 2);//0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
main(int argc, char *argv[])
{
char a = 1;
char b = 0;
//1.按位取反:~
printf("%d\n", ~a);//-2
//2.按位与:&(逻辑乘法):遇0则0
printf("%d\n", a & b);//0
//3.按位或:|(逻辑加法):遇1则1
printf("%d\n", a | b);//1
//4.按位异或:^:相同为0,不同为1;
//变来变去,也只有以下四种情况,所以异或两次还是相同的。
//不同变相同<-->相同变不同,不同变不同<-->不同变不同,相同变相同<-->相同变相同,相同变不同<-->不同变相同。
//5.左移:<< *2的n次幂
printf("%d\n", a << 2);//4
//6.右移:>> /2的n次幂
printf("%d\n", a >> 2);//0
system("pause");
return 0;
}
1 1 0 0
0 1 0 1
— — — —
1 0 0 1
0 1 0 1
— — — —
1 1 0 0