位运算使用技巧及巧解算法题

本文介绍了位运算的使用技巧,包括判断整数奇偶、取相反数、设置和清除位等,并通过实例展示了如何利用位运算巧妙解决算法题,如老鼠试毒问题、LeetCode题目等。

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

位运算使用技巧及巧解算法题

位运算

简单的复习一下基本的位运算,这些使用技巧在下面都有用到。

// 按位与 & , 双1得1, 其他都得0,使用:比如设置某些位为0,或者取某些位
// 按位或 | , 单1即可得1, 只有双0才得0,使用:比如设置某些位为1
// 异或 ^ , 相同则为0,相反则为1,即 10相碰得1,使用:比如取某些位的相反位

//下面这四个一般用来构造某些特殊的二进制数
// 按位取反 ~  很简单,取反即可
// 左移 <<  把数向左移,右边空出来的补0
// (无符号数)逻辑右移 >>   把数往右移,左边空出来的补0,注意在C中只有无符号数才如此
// (有符号数)算术右移 >>    把数往右移,左边空出来的补符号位,即正数补0,负数补1,有符号数执行的是算术运算
// 在其他语言中可能有不同,比如Java中算术右移和逻辑右移就是不同的运算符: >>和>>>

简单技巧

  1. 判断整型的奇偶
   if (x & 1)
       // 奇数
   else
       // 偶数
  1. 将一个数符号取反,即取相反数
int x;
x = ~x+1; //相反数
  1. 判断第n位是否设置为1
   if (x & (1 << n))
       // 是
   else
       // 否
  1. 将第n位设置为1
x = x | (1 << n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值