[英]Is there an easy way to get which power of two a number is?
如果我有一個數字,我確定它是 2 的冪,有沒有辦法得到這個數字是 2 的冪? 我想到了這個想法:計數並將數字右移 1 並增加計數直到數字為 0。但是還有其他方法嗎? 沒有櫃台?
編輯:這里有一些例子: 8 -> 返回 3 16 -> 返回 4 32 -> 返回 5
如果該數字稱為x
,您可以通過計算log2f(x)
找到它。 返回值是一個浮點數。
您需要包含<math.h>
才能使用log2f
。
這種方法肯定會奏效。 另一種可能的方法是每次都消除一半的可能性。 假設您有一個 8 位數字:00010000
按位和您的數字,其中一半位為 1,另一半為 0,例如 00001111。
00010000 & 00001111 = 00000000
現在你知道它不在前四位。 重復這樣做,直到你沒有得到 0:
00010000 & 00110000 = 00010000
而不是將其縮小到一個可能的位,即 1,這是您的 2 的冪。
您可以在 cmath 中使用日志 function ...
double exponent = log(number)/log(2.0);
...然后將其轉換為 int 。
使用二分搜索而不是線性搜索:
public void binarySearch() throws Exception {
int num = 0x40000;
int k = 0;
int shift = 16; // half of the size of the type (for in 16, etc)
int a = 0xffff; // lower half should be f's
while (shift != 0) {
if ((num & a) == 0) {
num = num >>> shift;
k += shift;
shift >>= 1;
} else {
shift >>= 1;
}
a = a >>> shift;
}
System.out.println(k);
}
如果您像我一樣執行for
循環,一種方法是在比較之前為循環計數器供電:
for (var i = 1; Math.pow(2, i) <= 1048576; i++) {
// iterates every power of two until 2^20
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.