ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

朝花夕拾 · C语言 | 位运算篇

2026/8/11 5:17:25 拓冰建站 浏览量
朝花夕拾 · C语言 | 位运算篇

& 按位与 全1为1,有0则0
| 按位或 有1则1,全0为0
^ 按位异或 相同为0,相异为1
~按位取反 1取反为0,0取反为1
<<按位左移 按位左移,低位补0 num << n <===> num *2^n

>>按位右移 按位右移动,有符号数高位补符号位:无符号数高位补0

num > > n <===> num / 2^n

9&6

0000 0000 0000 0000 0000 0000 0000 1001

0000 0000 0000 0000 0000 0000 0000 0110

0000 0000 0000 0000 0000 0000 0000 0000
9 | 6
0000 0000 0000 0000 0000 0000 0000 1001
0000 0000 0000 0000 0000 0000 0000 0110
0000 0000 0000 0000 0000 0000 0000 1111
9^6
0000 0000 0000 0000 0000 0000 0000 1001

0000 0000 0000 0000 0000 0000 0000 0110

0000 0000 0000 0000 0000 0000 0000 1111

~9
~0000 0000 0000 0000 0000 0000 0000 1001

1111 1111 1111 1111 1111 1111 1111 0110
9 << 3

0000 0000 0000 0000 0000 0000 0000 1001 <<3

0000 0000 0000 0000 0000 0000 0100 1000
9>>3

0000 0000 0000 0000 0000 0000 0000 1001 >> 3

0000 0000 0000 0000 0000 0000 0000 0001

位运算的使用:

1.指定n位置1

0000 0000--》0000 1000
0000 0001 << 3
0000 1000
1010 0000 | 0000 1000
1010 1000 //低四位置1


num = num | 1 <<n;
1010 0001 | 0000 0001 << 6
0100 0000
1110 0001 //低六位置1

2.指定n位置0

1010 1010
1111 0111 == &~(1 << 3)
1010 0010 //低四位置0


1111 0111 <==> ~0000 1000 <==> ~(1 << 3)


num =num &~(1<< n);


0011 1100 1010 1010 & ~(1 << 10) & ~(1 << 11)
1111 1011 1111 1111
0011 1000 1010 1010
1111 0111 1111 1111
0011 0000 1010 1010 //置11和12位为0

3.两数交换(不使用中间变量)

a=a^b;

b=a^b;

a=a^b;


a^a==0

a^0==a

b=(a ^ b ) ^ b = a ^ b ^ b = a ^ ( b ^ b ) = a ^ 0 = a;
a=a ^ b = a ^ b ^ a = 0 ^ b = b;

两数交换(中间变量):
int tmp = 0;

tmp = a;

a=b;
b = tmp;


求和方式:
a=a+b;

b=a- b; ===>a + b - b = a

a=a- b; ===>a + b - b =a + b - a

位运算符优先级:

~ 大于 << >> 大于 & 大于 ^ 大于 |