☰
【C++】位运算
2026/10/14 3:33:26 网站建设 项目流程

1、基础位运算

“<<” :左移

inta=5;// 二进制 0000 0101intb=a<<1;// 0000 1010,即 10intc=a<<2;// 0001 0100,即 20

“>>” :右移

inta=8;intb=a>>1;// 4intc=a>>2;// 2

“~” :按位取反

unsignedinta=0x0F;// 0000 1111unsignedintb=~a;// 1111 0000,即 0xFFFFFFF0

“&” :有0就是0,
“|” :有1就是1
“^” :相同为0相异为1 / 无进位相加

2、运算符优先级

能加()就加,不要死记

3、给一个数n,确定它的二进制表示的第x位数是0还是1

n =(n>>x)& 1
让n右移x位,去判断第x位,按位与&:
有0则0,1的二进制前面全是0,可以把n变成要不是0要不是1

4、给一个数n,吧它的二进制表示的第x位数改成1

n=n |(1<<x)按位或|:
有1则1,1左移到x位是1,其他位全是0,保证只有x位能被改

5、给一个数n,吧它的二进制表示的第x位数改成0

n=n & [ ~ ( 1<<x ) ]

6、位图的思想

用一个int变量当哈希表,每一个比特位存储信息

7、提取一个数n二进制表示最右侧的1

n & -n
-n:先~再加1,使得最右侧1的左侧区域完全相反,按位与下将全变成0,即类似“0000000100”

8、删除一个数n二进制表示最右侧的1

n & (n-1)
n-1:因为要借位,相当于最右侧的1的右侧取反,而最右侧1被变成0

9、异或^的运算律

a ^ 0 = a
a ^ a = 0
a ^ b ^ c = a ^ ( b ^ c )

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询