ビットフィールドとフラグ
真偽値や小さなフィールドを効率よく詰め込みます
「ビットフィールドとフラグ」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
多数のフラグを1バイトに収める
設定は、多くの場合オンまたはオフの切り替えです。ビットフィールドとしてパックすると、多数のフラグを小さな1つの整数に格納できます。
Booleanは1ビットを使う
packed struct 内では、bool は正確に1ビットを占有します。複数を並べると、1バイトを共有できます。
const Mode = packed struct {
bold: bool,
italic: bool,
underline: bool,
};Boolと小さな整数を組み合わせる
Packed struct では、フラグと幅の狭い整数を組み合わせられます。各ビット群が意味を持つ実際のレジスターをモデル化できます。
const Reg = packed struct {
enabled: bool,
speed: u3,
mode: u2,
};名前でフラグを読み取る
各ビットにはフィールド名でアクセスできます。データが密にパックされていても、コードを明確に読めます。
var m = Mode{ .bold = true, .italic = false, .underline = false };
if (m.bold) {}フラグを切り替える
フィールドに代入して、フラグを設定または解除します。手動でビットマスクを作る必要はなく、Zigがビット演算を処理します。
m.italic = true;生のビットを見る
内部の数値が必要ですか?@bitCast を使うと、フラグのStructをバッキング整数に変換して、保存や比較ができます。
const bits: u3 = @bitCast(m);受信したビットをデコードする
ファイルやデバイスからビットを読み取りますか?生の整数をStructに戻して、名前付きフラグへデコードします。
const incoming: u3 = 0b101;
const m: Mode = @bitCast(incoming);ビットフィールドとしてのEnum
フィールドには小さなバッキング整数を持つenumも使えます。名前付きの選択肢を、わずかなビットに収められます。
const Speed = enum(u2) { slow, medium, fast };パックする理由
ビットフィールドはメモリを節約し、ハードウェアに正確に対応します。組み込みコード、ドライバー、バイナリファイル形式で重要です。
レイアウトは予測可能なまま
Structがpackedであるため、ビット順序が変わることはありません。宣言した内容が、そのままハードウェアや他のプログラムから見える内容になります。
明確なコードとコンパクトなデータ
最大の利点は、データを手作業のビット操作と同じようにコンパクトに保ちながら、読みやすいフィールド名で記述できることです。🎛️
確認問題
packed struct 内でboolがどれだけの領域を使うか考えてみてください。
まとめ
フラグを1つの整数にパックしました。boolは1ビットを使い、幅の狭い整数やEnumも組み合わせられます。@bitCast でStructと生のビットを相互変換できます。🎉
よくある質問
「ビットフィールドとフラグ」レッスンは無料ですか?
はい。「ビットフィールドとフラグ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「ビットフィールドとフラグ」で何を学びますか?
真偽値や小さなフィールドを効率よく詰め込みます ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ビットフィールドとフラグ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。