十进制到位(二进制)

时间:2009-07-30 00:20:00

标签: algorithm

在任何语言中将十进制转换为二进制都很容易,反之亦然,但我需要一个更复杂的函数。

给定一个十进制数和一个二进制位,我需要知道二进制位是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 个答案:

答案 0 :(得分:6)

打印此页面,悬挂在显示器上方

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

但它大致类似于

if(value&(1<<< bit_number))

答案 1 :(得分:4)

真的?

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

通常,它将是1&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&bit;

答案 2 :(得分:0)

使用'easy'函数将十进制数转换为二进制数,然后与代表您正在测试的位的位掩码进行比较。

答案 3 :(得分:0)

的Python

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

如果您将位置从0(而不是1)编号,则可以节省大量时间。

>>> isBitTrue(30,1)
False
>>> isBitTrue(30,2)
True
>>> isBitTrue(30,3)
True

答案 4 :(得分:0)

bool IsBitTrue(int num , int pos)
{
 return ((num>>pos-1)%2==1)
}