【基础】c++位运算

本文详细介绍了位运算符的使用方法,包括与(&)、或(|)、异或(^)、左移(<<)和右移(>>), 并探讨了它们在算法优化中的应用, 如搜索算法、树上倍增等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录 

& 与          << 左移

 |  或          >> 右移

^ 抑或

用法

& 与     (and)
1 & 1 = 1      其他组合都为0
1.判断奇偶     奇数的最后一位是1, 偶数的最后一位是0
2.判断某一位是1还是0

| 或   (or)
1 | 1 = 1;    0 | 0 = 0;
1 | 0 = 1;    0 | 1 = 1;
只要有一个是 1 就返回 1

^ 抑或   (xor)
1 ^ 1 = 0;   0 ^ 0 = 0;
1 ^ 0 = 1;   0 ^ 1 = 1;
注意 : 满足 ( a ^ b) ^ b = a;

以上这些都可以在搜索或其他算法中作为收集 true 和 false 的工具

<<左移  (shl)
a << b  = a * ( 2 ^ b )                     // 注 : 这里指2的b次方, 下同
即把a的二进制表示数后添加b个0
常用 1 << x 来表示 2 的 x 次方

>>右移  (shr)
a >> b = int( a / (2 ^ b ) )
即把a的二进制表示数后硬生生除去b位

以上两种移位的运算可以用于各种二分、树上倍增(其他倍增也可以)、堆的运算等等
比普通的乘法、除法、取模要快很多
在优化程序时可以考虑

即把a的二进制表示数后添加b个0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值