2009-08-04 10 views

उत्तर

34

मैं आप कैसे थोड़ा मानचित्र (या बिट सरणी) सी में हैरानी की बात है, विकिपीडिया पर Bit_array प्रविष्टि अवधारणा का वर्णन करता है लागू करने के लिए पूछ रहे हैं मान, लेकिन वास्तव में कैसे मौलिक संचालन को लागू करने के लिए प्रदर्शित नहीं करता है , तो यहाँ जाता है।

संक्षेप में, अपने पसंदीदा हस्ताक्षरित प्रकार की एक सरणी बनाएं, और यह निर्धारित करने के लिए सही अंकगणित करें कि इसमें थोड़ा सेट कैसे सेट/साफ़ करें।

#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; 
} 
संबंधित मुद्दे