Какой самый быстрый способ преобразования int в двоичное представление в C? - PullRequest
1 голос
/ 07 декабря 2010

Например, 6 => [1,1,0]

Ответы [ 4 ]

2 голосов
/ 07 декабря 2010
unsigned x = number;
char buf[sizeof(int)*CHAR_BIT+1], *p=buf+sizeof(buf);
for (*--p=0; x; x>>=1) *--p='0'+x%2;
2 голосов
/ 07 декабря 2010

Для чтения битов вы можете использовать

char get_bit(unsigned int n, int bit_num){
    if (bit_num < 0 || bit_num >= sizeof(int) * CHAR_BIT)
        return -1;
    return (n >> bit_num) & 1;
};

Основная проблема в том, что он не быстрый, но OP даже не указал, нужны ли ему цифры или цифры.

1 голос
/ 07 декабря 2010

Простой и быстрый способ - использовать целое число без знака в качестве «курсора» и сдвинуть его для перемещения курсора:

1000000000000000
0100000000000000
0010000000000000
0001000000000000
0000100000000000
0000010000000000
0000001000000000
0000000100000000
...

На каждой итерации используйте побитовое значение &, чтобы увидеть, имеют ли число и курсор общие биты.

Простая реализация:

// number of bits in an unsigned int
#define BIT_COUNT (CHAR_BIT * sizeof(unsigned int))

void toBits(unsigned int n, int bits[BIT_COUNT])
{
    unsigned int cursor = (unsigned int)1 << (BIT_COUNT - 1);
    unsigned int i;

    for (i = 0; i < BIT_COUNT; i++, cursor >>= 1)
        out[i++] = (n & cursor) ? 1 : 0;
}
1 голос
/ 07 декабря 2010

Не знаю, но я бы сделал что-то вроде

int[32] bits = {};
int     value = 255;
int     i = 0;

while (value)   
{
  bits[i++] = value & 1;
  value = value >> 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...