C语言中的位运算:与、或、异或、取反,看完你就懂了
别被“位运算”吓到其实就是二进制里的“逻辑判断”先记住一张表硬核但有用运算符号规则二进制位与两个都是1 → 1否则0或|只要有一个1 → 1否则0异或^相同为0不同为1取反~0变11变0单目运算1. 与运算—— “两个都同意才通过”int a 5; // 0101 int b 3; // 0011 int c a b; // 0001 → 1通俗理解只有两个位都是1结果才是1。像情侣约会必须两人都有空才行。2. 或运算 | —— “一个同意就通过”int a 5; // 0101 int b 3; // 0011 int c a | b; // 0111 → 7通俗理解只要有一个1结果就是1。像群聊所有人只要一个人回复就算数。3. 异或运算 ^ —— “要么你要么我不能同时”int a 5; // 0101 int b 3; // 0011 int c a ^ b; // 0110 → 6通俗理解相同得0不同得1。像“你吃辣我就不吃我吃辣你就不吃” —— 只能一个人吃。小彩蛋a ^ a 0a ^ 0 a所以异或常用于交换两个变量不用临时变量。4. 取反运算 ~ —— “全反过来”int a 5; // 0000 0101 int b ~a; // 1111 1010 → -6补码表示通俗理解0变11变0。像照片的负片效果。注意它是单目运算符只对一个数操作。小心取反结果是有符号的打印出来可能是负数因为最高位是符号位。实战小例子秒懂#include stdio.h int main() { unsigned char x 0b1010; // 10 unsigned char y 0b1100; // 12 printf(x y %d\n, x y); // 1000 → 8 printf(x | y %d\n, x | y); // 1110 → 14 printf(x ^ y %d\n, x ^ y); // 0110 → 6 printf(~x %d\n, (unsigned char)~x); // 11110101 → 245 return 0; }什么时候用权限控制Linux文件权限读/写/执行用 和 |快速取模2的幂 用 如 n 1 判断奇偶加密/校验 用 ^位清零或置1 用 和 |总结一句话与都1才1、或有1就1、异或不同才1、取反全翻个儿。