2009-07-30 200 views
0

在任何語言中很容易將十進制轉換爲二進制,反之亦然,但是我需要一個更加複雜的函數。十進制到二進制(二進制)

給定一個十進制數和一個二進制位,我需要知道二進制位是On還是Off(True或False)。

例子:

 
IsBitTrue(30,1) // output is False since 30 = 11110 
IsBitTrue(30,2) // output is True 
IsBitTrue(30,3) // output is True

的功能將被稱爲次每秒很多,所以快速算法是必要的..你的幫助是非常讚賞:d

+5

「有點複雜」 ......雙關語意? – seth 2009-07-30 00:21:35

回答

6

打印此頁出來,上面掛顯示器

http://graphics.stanford.edu/~seander/bithacks.html

但它大致是這樣

如果(值&(1 < < bit_number))

+0

或bitnumber-1取決於你如何計算他們 – 2009-07-30 00:25:01

+0

我認爲你的意思是1而不是2,或**而不是`<<`。 – 2009-07-30 00:26:56

+0

是的,我意識到就像我打進了,但它不會讓我編輯它幾分鐘 – 2009-07-30 00:29:32

4

真的嗎?

def IsBitTrue(num, bit): 
    return (num & (1 << (bit-1))) > 0 

通常情況下,這將是1 < <位,但因爲你想索引LSB爲1 ...

0

用你的「易」功能,以十進制數轉換爲二進制,然後與表示正在測試的位的位掩碼進行比較。

0

的Python

def isBitTrue(number, position): 
    mask = 1 << (position-1) 
    return bool(number & mask) 

如果數量從(而不是1)0的位置,可以節省大量的時間。

>>> isBitTrue(30,1) 
False 
>>> isBitTrue(30,2) 
True 
>>> isBitTrue(30,3) 
True 
0
bool IsBitTrue(int num , int pos) 
{ 
return ((num>>pos-1)%2==1) 
}