2010-10-04 34 views
2

給定一個接受int變量的bool數據類型的方法,那麼將確定int是否是指數爲2的代碼行是什麼? 2^n ..... 2,4,8,16,32等我知道一種使用while循環和if語句的方法,但我正在尋找它在一行上。如果給定的int是2的指數,則返回#

回答

9

Bit Twiddling Hacks

uint v;   // we want to see if v is a power of 2 
bool f;   // the result goes here 

f = (v != 0) && ((v & (v - 1)) == 0); 
+1

適用於uint,但對於int變量,您需要排除0x80000000 – 2010-10-04 21:55:39

+0

因此,將v!= 0的檢查更改爲v> 0,然後您就可以開始了。 – 2010-10-04 22:27:25

6

只要檢查數字的日誌(基數2)是否爲整數。

在C#中的一行:

Math.Log(x, 2) % 1 == 0 

位運算是更多的樂趣,可是,老天對任何人都有維護該代碼憐憫。

+3

這是爲什麼downvoted?這是__a__解決方案。 – AraK 2010-10-04 21:53:15

+0

例如25呢?在這種情況下,平方根是5(整數),但不是有效數字。 – 2010-10-04 21:54:05

+0

由於我最初誤解了問題併發布了不正確的答案,因此它被低估了。它已被編輯爲正確的解決方案。 – 2010-10-04 21:54:58

4
bool powerOfTwo = (unchecked(n & (n-1)) == 0) && (n != 0) 
1
bool answer = ((n & ~(n-1)) == n && n!=0); 

這通過了所有我在它扔了基本測試。

看起來不錯。

相關問題