PowerOfTwo [2的幂]
# 介绍
如果只有一个 bit 被设置,其余的都没有被设置,那么一个数字将是 2 的幂。如果 n 是 2 的幂,难么 n-1 将会对 n 的所有 bit 进行取反,即 n&(n-1) = 0
。
# 实现
# JavaScript
/*
author: @Aayushi-Mittal
This script will check whether the given
number is a power of two or not.
A number will be a power of two if only one bit is set and rest are unset.
This is true for all the cases except 01 because (2^0 = 1) which is not a power of 2.
For eg: 10 (2^1 = 2), 100 (2^2 = 4), 10000 (2^4 = 16)
Reference Link: https://www.hackerearth.com/practice/notes/round-a-number-to-the-next-power-of-2/
If we will subtract 1 from a number that is a power of 2 we will get it's 1's complement.
And we know that 1's complement is just opp. of that number.
So, (n & (n-1)) will be 0.
For eg: (1000 & (1000-1))
1 0 0 0 // Original Number (8)
0 1 1 1 // After Subtracting 1 (8-1 = 7)
_______
0 0 0 0 // will become 0
*/
export const IsPowerOfTwo = (n) => {
if (n > 0 && (n & (n - 1)) === 0) {
return true
}
return false
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 扩展
找到下一个大于 n 的 2 的幂。
/**
*
* This script will find next power of two
* of given number.
* More about it:
* https://www.techiedelight.com/round-next-highest-power-2/
*
*/
const nextPowerOfTwo = (n) => {
if (n > 0 && (n & (n - 1)) === 0) return n
let result = 1
while (n > 0) {
result = result << 1
n = n >> 1
}
return result
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)
上次更新: 2022/10/20, 21:51:45