2009-07-30 202 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) 
}