C/C++ 常见位运算

常见运算符:

  1. << 左移运算符
  2. >> 右移运算符
  3. <<< 无符号右移运算符
  4. & 按位与
  5. |按位或
  6. ~ 按位非
  7. ^ 按位异或,相同位为0,不相同为1

常见操作

  1. 判断x是奇数还是偶数:(x&1)==0
  2. x乘以一个2的n次方的数:x<<n
  3. x除以一个2的n次方的数:x>>n
  4. 消去x最后一位的1:x&(x-1)
  5. 求x的相反数: ~(x-1)或者~x+1
  6. x的异或操作:~x = -x-1
  7. 把x从右边数第n位变1:x|(1<<(n-1))(n从1开始)
  8. 把x从右边数第n位变0:x&(~(1<<(n-1)))(n从1开始)
  9. 取x最后n位的值:x&((1<<n)-1)
  10. 取x前n位的值,后面的全部置为0:x & (~((1 << (32 - n)) - 1))
  11. 只保留x右边第一个1,其他的全部置为0:x & (-x)
  12. 或x & ~(x - 1)
  13. 判断x的第n位是偶数还是奇数:(x & (1 << (n - 1))) == 0
  14. 求x的绝对值:(n ^ (n >> 31)) - (n >> 31)       或(x >> 31) == 0 ? x : (~x + 1)      或(x + (x >> 31)) ^ (x >> 31)
  15. 求两个数的最大数:(x & ((y - x) >> 31)) | (y & (~(y - x) >> 31))
  16. 返回x的符号:(i >> 31) | (-i >>> 31)(正数为1,负数为-1)
  17. 两数相加:(x | y) + (x & y)           或(x ^ y) + ((x & y) << 1)
  18. 两数相减:(x & ~y) - (~x & y)
  19. 求两数的平均数:(x & y) + ((x ^ y) >> 1)      或(x + y) >> 1
  20. 判断一个数是不是2的次幂:(x != 0) && (x & (x - 1)) == 0
  21. x对2的n次方求余:x & (2^n - 1)(这里的^是幂的次方)
  22. 判断x和y的符号是否相同:(a ^ b) >= 0
  23. 异或运算符:x = a ^ b ^ x。 ==>   if(x == a) x = b; if(x == b) x = a;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值