&
位与:操作的两个位都是1,得到的结果就是1。其他情况结果都是0
#include <stdio.h>
int main() {
int a = 2;
int b = 3;
printf("%d\n", a & b); //把数变成了2进制数,进行操作,最后结果转换成10进制,得到2
return 0;
}
|
位或:操作的两个位都是0,得到的结果就是0,其他情况结果就是1
#include <stdio.h>
int main() {
int a = 2;
int b = 3;
printf("%d\n", a | b);
return 0;
}
~(单目)
位非:位的值为1,结果变成0。值为0,结果变成1。
#include <stdio.h>
int main() {
char a = 2;
char b = 3;
printf("%ud\n", ~a);
return 0;
}
^
位异或:操作的两个位不相同,得到的结果就是1.其他情况都是0
#include <stdio.h>
int main() {
int a = 2;
int b = 3;
printf("%d\n", a ^ b); //结果为1
return 0;
}
#include <stdio.h>
int main() {
int a = 2, b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d\t,b = %d\n", a,b); //a与b的值做交换,可以使用^异或
return 0;
}
<<
位左移:将左操作数据的数据位往左移动右操作数表示的位数,左边移出的数据位丢弃,右边补0
位左移 n 位,相当于乘 2 的 n 次幂
#include <stdio.h>
int main() {
int a = 2;
int b = 3;
printf("%d\n", a << 1); //结果为4
return 0;
}
>>
位右移:将左操作数据的数据位往右移动右操作数表示的位数,右边移出的数据位丢弃,正数左边补0,负数左边补1
位右移 n 位,相当于右操作数整除 2 的 n 次幂
#include <stdio.h>
int main() {
int a = 2;
int b = 3;
printf("%d\n", b >> 1);
return 0;
}
