Десятичное в бит (двоичное) - PullRequest
0 голосов
/ 30 июля 2009

Легко преобразовать десятичное число в двоичное и наоборот на любом языке, но мне нужна более сложная функция.

Учитывая десятичное число и двоичное место, мне нужно знать, включен ли двоичный бит в значение «Вкл» или «Выкл» (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 ]

6 голосов
/ 30 июля 2009

Распечатайте эту страницу, повесьте над монитором

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

Но это примерно что-то вроде

if (значение & (1 << bit_number)) </p>

4 голосов
/ 30 июля 2009

Действительно

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

Обычно это будет 1 << бит, но, поскольку вы хотите индексировать младший бит как 1 ... </p>

0 голосов
/ 30 июля 2009
bool IsBitTrue(int num , int pos)
{
 return ((num>>pos-1)%2==1)
}
0 голосов
/ 30 июля 2009

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
0 голосов
/ 30 июля 2009

Используйте вашу 'легкую' функцию для преобразования десятичного числа в двоичное, а затем сравните его с битовой маской, представляющей бит, который вы тестируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...