C中的位图是什么?

位图是位数组 。 它是如何在C中实现的?

我假设您正在询问如何在C中实现位图(或位数组)。令人惊讶的是,维基百科上的Bit_array条目描述了这个概念,但实际上并没有说明如何实现基本操作,所以这里就是这样。

简而言之,创建一个你最喜欢的无符号类型的数组,并做正确的算术来决定如何设置/清除它中的位。

#include  /* for CHAR_BIT */ #include  /* 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; }