表达式:(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);
}



目录
相关文章
【剑指offer】-数值的整数次方-12/67
【剑指offer】-数值的整数次方-12/67
|
机器学习/深度学习
1208:2的幂次方表示
1208:2的幂次方表示
145 0
剑指offer 15. 数值的整数次方
剑指offer 15. 数值的整数次方
51 0
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
50 0
35.数值的整数次方
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
判断是否为2的次幂
判断是否为2的次幂
94 0
076.计算高次方数的尾数
076.计算高次方数的尾数
125 0
|
机器学习/深度学习
运用 lowbit 判断 2 的幂
运用 lowbit 判断 2 的幂
|
存储
如何快速算出一个数的n次方?
先计算存储下来再求值,不失为一种好方法;但亦可以在计算 的同时判断 分解为 的幂(即转为 进制)后是否含 ,边计算边乘。 形式化地,对于 位,其代表的幂 为 ()。 这样,我们由低位向高位计算,每次将底数平方即可。 下面两份伪代码,分别对应这种方法的如上两种实现。
921 0
如何快速算出一个数的n次方?
|
程序员
2的0次方为什么等于1?
2的0次方为什么等于1?
288 0