Что такое битовый массив в C?

Вероятно, потому что 397 начало достаточного размера, чтобы заставить переменную результата переполнять и смешивать биты хеша несколько, обеспечивая лучшее распределение хэш-кодов. Нет ничего особенно специального приблизительно 397, который отличает его от других начал той же величины.

16
задан George Stocker 24 June 2016 в 18:30
поделиться

1 ответ

Полагаю, вы спрашиваете, как реализовать битовую карту (или битовый массив) в C. Удивительно, но запись Bit_array в Википедии описывает концепция, но на самом деле не показывает, как реализовать основные операции, так что здесь.

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

#include <limits.h>    /* for CHAR_BIT */
#include <stdint.h>   /* for uint32_t */

typedef uint32_t word_t;
enum { BITS_PER_WORD = sizeof(word_t) * CHAR_BIT };
#define WORD_OFFSET(b) ((b) / BITS_PER_WORD)
#define BIT_OFFSET(b)  ((b) % BITS_PER_WORD)

void set_bit(word_t *words, int n) { 
    words[WORD_OFFSET(n)] |= (1 << BIT_OFFSET(n));
}

void clear_bit(word_t *words, int n) {
    words[WORD_OFFSET(n)] &= ~(1 << BIT_OFFSET(n)); 
}

int get_bit(word_t *words, int n) {
    word_t bit = words[WORD_OFFSET(n)] & (1 << BIT_OFFSET(n));
    return bit != 0; 
}
46
ответ дан 30 November 2019 в 15:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: