「C言語/中級者向けの話題」の版間の差分

削除された内容 追加された内容
単元『C言語/構造体・共用体』に移動した構造体配列の話題を除去。
タグ: 置換
『C言語/構造体・共用体』2018年7月3日 (火) 05:38‎ から、ビットフィールドの話題をこちらに移動。共用体も知らない初心者に教えるようなレベルの内容ではないので。
4 行
 
宣言以外のときに代入したい場合には、面倒だが、各要素に一個ずつ中身を代入していくしかない。
 
 
== 構造体のビットフィールド ==
ビットフィールドとは、
1ビット以上のビットからなる、
構造体のメンバの一種である。
ビットフィールドを用いると、
1ビット以上のビットに名前をつけ、
その名前でアクセスできる。
 
ビットフィールドは、
構造体の型枠を宣言する時、
メンバとして次のように記述する。
<source lang=c>
データ型 メンバ名:サイズ;
</source>
 
データ型は、(signed) intまたはunsigned intを指定する。
(signed) intを指定すると、
上位ビットが符号として扱われる。
メンバ名とサイズとを「:(コロン)」で区切る。
サイズはそのメンバを何ビットで表すかを指定する。
 
<source lang=c>
//例 ビットフィールド
#include <stdio.h>
 
int main(void)
{
struct sbits
{
unsigned char bit8:1;
unsigned char bit7:1;
unsigned char bit6:1;
unsigned char bit5:1;
unsigned char bit4:1;
unsigned char bit3:1;
unsigned char bit2:1;
unsigned char bit1:1;
}bits;
 
bits.bit1=1;
bits.bit2=0;
bits.bit3=1;
bits.bit4=0;
bits.bit5=1;
bits.bit6=0;
bits.bit7=1;
bits.bit8=0;
printf("bitsのメンバの値は、%d %d %d %d %d %d %d %dです。\n",
bits.bit1,bits.bit2,bits.bit3,bits.bit4,bits.bit5,bits.bit6,bits.bit7,bits.bit8);
printf("bitsのサイズは、%dです。\n", sizeof(bits));
}
</source>
 
上の例では、
0か1かの値を持つ1ビットの、
8つのビットフィールドをもつ、
bits構造体を宣言し、
各ビットフィールドに値を代入し、
その値を表示している。
なお、unsigned char型をビットフィールドに使えるかは、コンパイラによる。