Thao tác bit nâng cao
Bit Mask - Mặt nạ bit
#define BIT(n) (1 << n) // bit thu n
Set/Clear/Toggle bit
int x = 0;
x |= BIT(3); // set bit 3: x = x | (1<<3)
x &= ~BIT(3); // clear bit 3: x = x & ~(1<<3)
x ^= BIT(3); // toggle bit 3: x = x ^ (1<<3)
(x & BIT(3)) // kiem tra bit 3
Kiểm tra bit
int is_set(int x, int n) { return (x >> n) & 1; }
Đếm bit 1 (Hamming weight)
int count_bits(int x) {
int count = 0;
while (x) { count += x & 1; x >>= 1; }
return count;
}
// Toi uu: x & (x-1) xoa bit 1 cuoi cung
int count_bits_opt(int x) {
int count = 0;
while (x) { count++; x &= x - 1; }
return count;
}
Endianness
int x = 0x12345678;
char *c = (char*)&x;
if (*c == 0x78) printf("Little endian");
else printf("Big endian");
Checksum đơn giản
char checksum(char *data, int len) {
char sum = 0;
for (int i = 0; i < len; i++) sum ^= data[i];
return sum;
}
Flag pattern
#define FLAG_READ (1 << 0)
#define FLAG_WRITE (1 << 1)
#define FLAG_EXEC (1 << 2)
int flags = FLAG_READ | FLAG_WRITE;
if (flags & FLAG_READ) printf("Co quyen doc");