C ビットフィールド 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(ビットフィールド)
(ビットフィールド)
34行: 34行:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
としても、32までしか使えないため、指定を無視して32bitに切り詰められます。
+
としても、32までしか使えないため、コンパイルエラーになります。
  
  
77行: 77行:
  
 
上記のようにビットフィールド値に0を指定すると、次のint型の区切りまでビットフィールドの確保開始位置をシフトします。1bitの変数ですが、4Byteのメモリサイズを使うようにふるまいます。
 
上記のようにビットフィールド値に0を指定すると、次のint型の区切りまでビットフィールドの確保開始位置をシフトします。1bitの変数ですが、4Byteのメモリサイズを使うようにふるまいます。
 +
 +
 +
指定したビットを使わないために以下のように指定してビットフィールドに隙間を設けたようなメモリ確保もできます。
 +
<syntaxhighlight lang="cpp">
 +
struct stBFBool{
 +
    unsigned int bf1_aflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_bflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_cflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_dflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_eflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_fflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_gflag :1;
 +
    unsigned int          :7;
 +
    …
 +
    unsigned int bf1_xflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_yflag :1;
 +
    unsigned int          :7;
 +
    unsigned int bf1_zflag :1;
 +
    unsigned int          :7;
 +
};
 +
</syntaxhighlight>
 +
と上記のように8ビットずつの単位で1ビットの変数を作ることもできます。名前定義されていない変数に7bitを割り当てることで8bit毎のメモリ確保になるようにふるまいます。
 +
 +
 +
マイクロソフト固有の仕様になりますが、ビットフィールドの記述順にメモリの下位側から上位ビット側へとメモリが確保され、次の1バイト大きいアドレス番号へとメモリの確保する領域が進んでいくように処理がなされます。

2015年4月15日 (水) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス