位运算应用及其注意事项

1. 可能发生的溢出

  • 使用 64 位整数时发生的溢出。试编写代码,使其能够确认无符号的 64 位整数的位掩码(bitmask)a 的第 b 位(从右向左数)是否已经打开。

    bool isBitSet(unsigned long long a, int b) {
        return a & (1 << b) > 0; 
    }

    注意,在 C++ 中,1 会定义为有符号的 32 位整数,当 b 超过 32 时,(1<

2. 使用位掩码实现集合及其操作

集合的操作是位掩码的最重要的应用范围。这种应用中,N 位整数,可以拥有 0 到 N-1 个整数元素的集合。要判断某个元素 i 是否包含在集合中,只要查看 表示 2i 的位是否打开即可。

例如,可将具有 6 个元素的集合 {1, 4, 5, 6, 7, 9} 的整数 754 表示如下:

  • 2^1+2^4+2^5+2^6+2^7+2^9 = 754

如我们需要判断 7 这个元素是否在集合中,则可通过,(1 << 7) & 754 的结果是否大于 0 来判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值