六种位运算符
& 按位与
用处
- 将变量某些位清0且同时保持其他位不变
example: 将int变量n的低8位全置成0, 而其余位不变, n = n & 0xffffff00; - 获取变量中的某一位
example: 判断一个int类型变量第n位是否是1(从右往左, 从0开始数), n & 0x80 是否等于 0x80(即1000 0000) - 判断一个数字的奇偶
example: 一个数 ^ 1 的结果就是二进制的最末位
| 按位或
用处
- 将变量某些位置1且同时保持其他位不变
example: 将int类型变量n的低8位全置成1, 而其余位不变, n |= 0xff(1111 1111) - 二进制特定位上无条件赋值
example: 把二进制最末尾变1, (n | 1) - 1
^ 按位异或
规则
- 相同取0,相异取1
特点
- 若a ^ b = c, 那么就有 c ^ b = a以及 c ^ a = b.此规律可用来进行简单的加密和解密
用处
将变量某些位取反且同时保持其他位不变
example: 将int类型变量n的低8位取反, 而其余位不变, n = n ^ 0xff(1111 1111)123450000 0000 1111 1111^0010 1110 1001 0000==0010 1110 0110 1111不使用中间变量交换a, b的值
123a = a ^ b;b = a ^ b;a = a ^ b;