快速计算32位数中1的位数

快速计算32位数中1的位数

 

转载http://blog.csdn.net/sailor_8318/archive/2008/10/12/3059935.aspx

 

 

一语句实现x是否为2的若干次幂的判断

#define is2*n(x)  ((x & (x - 1))? 0 : 1)

int main(void)

{

        int m = 512;

        cout << ((m & (m - 1)) ? false : true) << endl;

        //即当m中只有一位为1时,才为若干次幂值

//若有两个及以上1,则(m & (m - 1))不为0,输出0,表示不为2的若干次幂

        return(0);

}

 

类比:x为2的若干次幂即表示x中1的位数为1,题目转化为求一个32位数中1的位数,如果为1,则表示该数为2的若干次幂

 

同理也可以利用此规则求一个32位数中1的位数, (m & (m - 1)每次可用消除一个1,计算的次数即为1的个数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用如下公式快速计算数字的位数: ``` 位数 = floor(log10(abs(数字))) + 1 ``` 其,`log10` 表示以 10 为底的对数,`abs` 表示绝对值,`floor` 表示向下取整,最后加 1 是因为从 1 位数开始计算。 例如,对于数字 123,它的位数可以用如下公式计算: ``` 位数 = floor(log10(abs(123))) + 1 位数 = floor(2.08994) + 1 位数 = 2 + 1 位数 = 3 ``` 因此,数字 123 的位数为 3。 ### 回答2: 要快速找出数字的位数,可以使用以下方法: 1. 首先,将要计算位数的数字转换为字符串,以便于后续操作。 2. 判断该字符串是否为空,若为空则说明数字为0,位数为1。反之,继续下一步操作。 3. 使用字符串的长度函数,可以快速获取字符串的长度,即数字的位数。 举例说明: 假设要计算的数字为123456789,按照以上步骤进行操作: 1. 将数字123456789转换为字符串:"123456789"。 2. 字符串不为空,继续下一步操作。 3. 使用字符串的长度函数计算字符串的长度,得到数字的位数为9。 以上方法可以应用于任意数字,无论是正数、负数还是小数。只需要将数字转换为字符串,然后使用字符串的长度函数即可快速找出位数。 需要注意的是,如果数字的位数较大,可能会导致字符串长度较长,进而影响计算的效率。因此,在实际应用,可以根据具体情况选择更合适的方法来提高计算效率。 ### 回答3: 要快速找出一个数字的位数,可以采取以下方法: 1. 通过取对数的方式:对于正整数n,取其以10为底的对数log10(n),然后将结果向上取整,得到的整数即为n的位数。例如,对于数字12345,log10(12345)≈4.09,向上取整得到5,表示该数字的位数为5。 2. 通过循环比较的方式:使用循环计算数字的位数。首先,初始化一个计数器count为1,然后通过不断地将数字除以10,直到其小于10为止,每次循环都将count加1。最后得到的count即为数字的位数。例如,对于数字5678,循环计算过程为5678÷10=567、567÷10=56、56÷10=5,此时数字小于10,循环终止,count的值为4,表示该数字的位数为4。 3. 通过转化为字符串的方式:将数字转化为字符串,然后使用字符串方法计算其长度,即可得到数字的位数。例如,将数字789转化为字符串'789',然后使用字符串方法len('789'),得到的结果为3,表示该数字的位数为3。 以上是几种常见的快速找出数字位数的方法,可以根据具体情况选择其一种方法进行使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值