1、~(按位取反)
unsigned char ret = ~0x05
printf("%d\n",~5); //-6 先把16进制转化为二进制,将二进制进行取反,再将取反后的数转化成十进制
2、&(按位与)
语法:a & b(只有同1为1)
3、| (按位或)
语法:a | b(有一个为1则是1)
4、^ (按位异或)
语法:a ^ b
5、<<(按位左移)
无符号左移:
语法:操作数 << 移动位数
unsingned int a = 3 << 3;
printf("%d\n",a); //24 先将3转化成二进制数,进行左移,将移动后的数再转化成10进制
有符号右移:
语法:操作数 << 移动位数
int a = -3 << 3;
printf("%d\n",a); //-24 先将3转化成二进制数,进行左移,将移动后的数再转化成十进制
6、<<(按位右移)
方法同左移
注意 :
1. 在进行移位运算的时候,凡是被移出去的位统统丢弃,凡是空出来的位统统补0。移位运算针对的 是无符号整数.
2. 如果非要进行有符号的移位运算,那么左移的时候,空出来的补0,右移的时候,空出来的补符号 位1(原码阶段)