給定數字的b+樹創建
Problem statement:
問題陳述:
Find Next and previous power of two of a given number
查找給定數字中兩個的下一個和上一個冪
Next power of two
下一個二的冪
Example(1):
input: 22
output: 32 ( as 32 is 2^5)
Example(2):
input: 54
output: 64 (as 64 is 2^6)
Previous power of two
以前的二的冪
Example(1):
input: 22
output: 16
Example(2):
input: 54
output: 32
We can solve this problem using bit manipulation easily.
我們可以使用位操作輕松解決此問題。
Just have a look on the binary representation of the number which is a power of 2.
只需看一下數字的二進制表示形式就是2的冪。
power of 2 Binary Representation
1 1
2 10
4 100
8 1000
16 10000
32 100000
64 1000000
128 10000000
As we can see every number have only their left most bit set (i.e 1) and rest are unset (i.e 0).
我們可以看到,每個數字只有最左邊的位(即1)被置位,其余的都未置位(即0)。
求2的前次冪 (Finding previous power of 2)
If we somehow, can unset all bits except the left most bit in a binary representation of number we will get previous power of two of the given number.
如果我們以某種方式可以取消設置二進制數字表示形式中除最左邊的位以外的所有位,我們將獲得給定數字的2的冪。
Example:
例:
Number Binary representation previous power of two
7 111 100 (i,e 4)
25 11001 10000 (i.e 16)
95 1011111 1000000 (i,e 64)
We will use Bitwise AND ( & ) operation to clear bits.
我們將使用按位與(&)操作清除位。
Here is Algorithm to get previous power of 2 of n,
這是獲取n的2的先前冪的算法,
step 1: n = n & n-1
step 2: if n is power of two , n is our desired result,go to step 3.
else go to step 1.
step 3: print n and stop
Explanation:
說明:
let n = 27 ( 11011 in binary)
n-1 = 26 ( 11010 in binary)
n&n-1 = 26
as 26 is not a power of 2 so we will repeat above step again
new n = 26
n = 26 ( 11010 in binary)
n-1 = 25 ( 11001 in binary)
n&n-1 = 24 ( 11000 in binary)
as 24 is not a power of 2 so we will repeat above step again
new n=24
n = 24 ( 11000 in binary)
n-1 = 23 ( 10111 in binary)
n&n-1 = 16 ( 10000 in binary)
as 16 is a power of 2 so this is our answer
尋找二的下冪 (Finding next power of Two)
To get next power of two, all we have to do is to find a binary number greater than the given number having only left most bit set.
要獲得2的下一個冪,我們要做的就是找到一個比給定數字大的二進制數,該二進制數只剩下最左邊的位。
We can use left shift operator ( << )to generate a number having only its left most bit set.
我們可以使用左移運算符(<<)來生成僅設置其最左位的數字。
Left shift operation example:
左移操作示例:
1 << 5
This means that shift 1 left by 5 place
1 in binary is represented as 1
so after shifting 1 by 5 place left,
output will be 100000 ( i.e 32 in decimal)
5 << 2
This means that shift 5 left by 2 place
5 in binary is represented as 101
so after shifting it by 2 place to left,
output will be 10100 ( i.e 20 in decimal)
Note: In each shift right most bit will be set to 0;
注意:在每個移位右移的大多數位將被設置為0;
Program:
程序:
</ s> </ s> </ s>#include<bits/stdc++.h>
using namespace std;
long int nextPowerOfTwo ( int n )
{
// Result is intialized as 1
long int value = 1;
// The following while loop will run until we
// get a number greater than n
while(value<=n)
{
// value will be left shifted by 1 place in each iteration
value=value << 1;
}
return value ;
}
int previousPowerOfTwo(int n )
{
// If n is already a power of two, we can simply shift it right
// by 1 place and get the previous power of 2
// (n&n-1) will be 0 if n is power of two ( for n > = 2 )
// (n&&!(n&(n-1))) condition will take care of n < 2;
if((n&&!(n&(n-1)))==1)
{
return (n>>1);
}
// This while loop will run until we get a number which is a power of 2
while(n&n-1)
{
// Each time we are performing Bit wise And ( & )operation to clear bits
n=n&n-1;
}
return n ;
}
int main()
{
int n;
cout << "Enter Number\n";
cin >> n;
long int num=nextPowerOfTwo(n);
cout << "Next power of two : " << num ;
cout << "\n\nEnter Number\n";
cin >> n;
num=previousPowerOfTwo(n);
cout << "Previous power of two : " << num ;
return 0;
}
Output
輸出量
Enter Number
34
Next power of two : 64
Enter Number
34
Previous power of two : 32
Process returned 0 (0x0) execution time : 7.681 s
Press any key to continue.
翻譯自: https://www.includehelp.com/cpp-programs/find-next-and-previous-power-of-two-of-a-given-number.aspx
給定數字的b+樹創建