表达式:(n&(n-1))==0——n是否是一个2幂次方的数

简介: 表达式(n&(n-1))等于0,说明n是一个2幂次方的数

一、分析一下

(n&(n-1))==0——n是否是一个2幂次方的数?

1、找规律

0:0000

1:0001

2:0010

3:0011

4:0100

5:0101

6:0110

7:0111

8:1000

......

我可以发现1&0等于0;2&1等于0;4&3等于0;8&7等于0。

1、2、4、8都是2幂次方的数。


二、实战场景

1、判断当前编译环境指针的大小是否正确。

我们知道指针的大小肯定为一个2幂次方的数。


const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8;
assert((align & (align-1)) == 0); 


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


while (n >0 )
 {
      count ++;
      n &= (n-1);
}



目录
相关文章
|
7月前
|
Python
如果一个n位正整数等于其各位数字的n次方之和
如果一个n位正整数等于其各位数字的n次方之和
|
7月前
|
Python
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
380 1
|
7月前
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
78 0
一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数
一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数
757 0
一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
55 0
35.数值的整数次方
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
打印0~100000之间的水仙花数, 水仙花数指一个n位数,其各位数的n次方之和正好等于该数本身
打印0~100000之间的水仙花数, 水仙花数指一个n位数,其各位数的n次方之和正好等于该数本身
115 0
判断是否为2的次幂
判断是否为2的次幂
97 0
输出最小的数位和等于x并且各个数位都不一样的值
输出最小的数位和等于x并且各个数位都不一样的值
47 0
076.计算高次方数的尾数
076.计算高次方数的尾数
128 0