位运算符
~
int a= 3;
a -> 0000 0000 0000 0000 0000 0000 0000 0011
~a -> 1111 1111 1111 1111 1111 1111 1111 11 00
& 位逻辑 有零得零 ---->清零操作
int a= 3; a:0011
int b= 5; b:0101
a&b : 0001
| 与操作 有一得一 ---->置一操作
int a= 3; a:0011
int b= 5; b:0101
a|b : 0111
^ 位逻辑异或 相同得0,不同得1
int a= 3; a:0011
int b= 5; b:0101
int c=a^b;
printf("c:%d\n",c); // 6
printf("c^a:%d\n",c^a); // 3 ---->a
printf("c^b:%d\n",c^b); //5 ----->b
<< 左移 移出去的直接丢弃,空出来的补0
int a=3;
a -> 0000 0000 0000 0000 0000 0000 0000 0011
a <<4 0000 0000 0000 0000 0000 0000 0011 0000
int a=-3; //负数在内存用补码存在
a -> 1000 0000 0000 0000 0000 0000 0000 0011
取反 // 1111 1111 1111 1111 1111 1111 1111 1100
补码 加1 // 1111 1111 1111 1111 1111 1111 1111 1101
a <<4 1111 1111 1111 1111 1111 1111 1101 0000 // -48
-48 // 1000 0000 0000 0000 0000 0000 0011 0000
取反 // 1111 1111 1111 1111 1111 1111 1100 1111
加一// 1111 1111 1111 1111 1111 1111 1101 0000
>> 右移
int a=3;
a -> 0000 0000 0000 0000 0000 0000 0000 0011
a >>4 0000 0000 0000 0000 0000 0000 0000 0000