比特位操作算法题汇总

本文汇总了关于比特位操作的常见算法题目,包括判断正整数是否为2的整数次幂、计算整数二进制中1的个数以及反转无符号整数的所有比特位。通过解法介绍,帮助理解并解决这类问题。
摘要由CSDN通过智能技术生成

涉及比特位操作的算法题有很多,本文对其中常见的一些进行汇总,所有资源来自网络。

一、判断一个正整数是否是2的整数次幂

判断一个整数N是否是2的整数次幂,这是个很常见的问题。比如4、8等都是2的整数次幂,而6不是。

解法1)一个基本的解法是设定i=1开始,循环乘以2直到i>=n,然后判断i是否等于n即可。

解法2)当然还有一个更好的方法,那就是观察一个数字的二进制表示,如n=101000,则我们可以发现n-1=100111。也就是说n=>n-1是将n最右边的1变成了0,同时将n最右边的1右边的所有比特位由0变成了1。因此如果n & (n-1) == 0就可以判定数字n为2的整数次幂。(注意一个地方,n=0为特殊情况,需要额外考虑,因此最终的判定表达式为n && !(n & (n-1)) ).

bool powOf2(int n)
{
    return n && !(n & (n-1));
}


二、求一个整数二进制表示中1的个数

如给定N=6,则它的二进制表示为0110,所以二进制表示中1的个数为2。

解法1)一个自然的方法是将N和1按位与,然后将N除以2,直到N为0为止。该算法代码如下

int numOf1
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值