12
Một bitmap là array of bits. Làm thế nào nó được thực hiện trong C?Bitmap trong C là gì?
Một bitmap là array of bits. Làm thế nào nó được thực hiện trong C?Bitmap trong C là gì?
Tôi giả sử bạn đang hỏi cách triển khai một bản đồ bit (hoặc bit mảng) trong C. Đáng ngạc nhiên, mục nhập Bit_array trên wikipedia mô tả khái niệm, nhưng không thực sự hiển thị cách triển khai các hoạt động cơ bản Vì vậy, ở đây đi.
Tóm lại, tạo một mảng kiểu không dấu yêu thích của bạn và thực hiện đúng số học để quyết định cách đặt/xóa một chút trong đó.
#include <limit.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;
}