Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Giải thích bit field (trường bit) trong C dùng cấu trúc (struct)

Khái niệm

Bit field dùng để xác định kích thước biến tính bằng bit. Thường được định nghĩa bên trong struct.

  • 1 byte = 8 bit.

Ví dụ

struct info {
    int x:2; // x chiếm 2 bit
};

Không thể gán giá trị ngoài phạm vi của bit field. Không dùng scanf cho bit field vì không thể lấy địa chỉ (&) hay sizeof. Kiểu dữ liệu cho phép: int, signed int, unsigned int.

Chương trình 1: Bit field kiểu unsigned int

#include <stdio.h>

struct info {
    unsigned int x:3; // 3 bit
};

int main() {
    struct info i;
    i.x = 8; // ngoài phạm vi 0-7
    printf("%d", i.x);
    return 0;
}

Kết quả

0

Giải thích

  • Phạm vi unsigned int n bit: 0 đến 2ⁿ⁻¹. Với n=3 => 0 đến 7.
  • Gán 8 (1000₂) cắt bỏ bit cao => 000₂ = 0.

Chương trình 2: Bit field kiểu int (signed)

#include <stdio.h>

struct info {
    int x:3; // 3 bit signed
};

int main() {
    struct info i;
    i.x = 4;
    printf("%d", i.x);
    return 0;
}

Kết quả

-4

Giải thích

  • Phạm vi signed int n bit: -2ⁿ⁻¹ đến 2ⁿ⁻¹⁻¹. Với n=3 => -4 đến 3.
  • 4 trong 3 bit signed là 100₂ => giá trị -4 (bù 2).