首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C語言基礎教程(四)位域結構體:位級數據壓縮、訪問語法與工程應用

     編輯:C 語言基礎

位域結構體定義

用於按位訪問字節/字的多個位,比位運算符更方便。語法:

struct 位結構名 {
    數據類型 變量名: 位寬;
    數據類型 變量名: 位寬;
} 位結構變量;
  • 類型必須為 int(signed 或 unsigned)。
  • 位寬為 0~15 的非負整數,表示佔用二進制位數。
  • 變量名可省略(用於對齊填充)。

示例:視頻屬性位域

struct {
    unsigned incon: 8;      // 低字節 0-7 位
    unsigned txcolor: 4;    // 高字節 0-3 位
    unsigned bgcolor: 3;    // 高字節 4-6 位
    unsigned blink: 1;      // 高字節第 7 位
} ch;

訪問方式同普通結構:ch.bgcolor。

四大注意事項

  1. 位寬為 1 時強制視為 unsigned(單位無符號)。
  2. 位域成員不可為數組/指針,但位域結構變量可定義為數組/指針(指針訪問用 ->)。
  3. 總位寬可超過兩字節,編譯器自動分配足夠存儲單元。
  4. 位域成員可與普通成員混用。

工程應用:節省存儲空間

struct info {
    char name[8];
    int age;
    struct addr address;
    float pay;
    unsigned state: 1;   // 工人狀態
    unsigned paid: 1;    // 工資發放標志
} workers;

兩個 1 位位域僅佔 1 字節,卻保存兩項關鍵信息,大幅壓縮存儲開銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved