位操作的一些总结

位运算是对整数在内存中的二进制位进行操作的方法。在计算机科学中,位运算是一种基础且重要的运算方式。下面是一些基本的位运算规则:

  1. 按位与(AND):符号为&。对于每一位,只有两个操作数相应的位都为1时,结果位才为1,否则为0。

  2. 按位或(OR):符号为|。对于每一位,只要两个操作数相应的位中有一个为1,结果位就为1。

  3. 按位异或(XOR):符号为^。对于每一位,只有两个操作数相应的位不同,结果位才为1,如果相同则为0。

  4. 按位取反(NOT):符号为~。对于操作数的每一位,1变成0,0变成1。

  5. 左移(Left Shift):符号为<<。将一个数的所有位向左移动指定的位数,右边空出的位用0填充。

  6. 右移(Right Shift):符号为>>。将一个数的所有位向右移动指定的位数。对于无符号数,左边空出的位用0填充;对于有符号数,某些系统用0填充(逻辑右移),而另一些则用符号位填充(算术右移)。

我们在做位运算时被操作的数可以是任何无符号的整数类型,但建议在所有的地方使用相同的类型,这里假定为以下数据类型:

using Uint = unsigned long;
  • 设置位(Setting a bit)

 将数字的第n位设置为1

inline Uint bit_set(Uint number, Uint n) {
    return number | ((Uint)1 << n);
}
  • 清除位(Clearing a bit)

将数字的第n位设置为0

inline Uint bit_clear(Uint number, Uint n) {
    return number & ~((Uint)1 << n);
}
  • 翻转位(Toggling a bit)

翻转数字的第n位

inline Uint bit_toggle(Uint number, Uint n) {
    return number ^ ((Uint)1 << n);
}
  • 检查位(Checking a bit)

判断数字的第n位是否为1

inline bool bit_check(Uint number, Uint n) {
    return (number >> n) & (Uint)1;
}
  • 将第n位更改为x(Changing the nth bit to x

x为true时,类似于bit_set操作;

x为false时,类似于bit_clear操作;

inline Uint bit_set_to(Uint number, Uint n, bool x) {
    return (number & ~((Uint)1 << n)) | ((Uint)x << n);
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值