ビットフィールド(bitfield)を使うことでメモリ領域を任意のビットで扱うことができる。方法は構造体とほとんど同じ。基本となる型はintかunsignedを使う。下の例ではunsignedをC言語にはない1ビットのbooleanとして扱ってみる。つまり下位1ビットしか扱わないので、0か1しか扱えなくなる。
ビットフィールド
#include <stdio.h>
struct{
unsigned boolean: 1;
}Boolean;
int main(void){
Boolean.boolean;
int i;
for(i=0; i<10; i++){
Boolean.boolean = i;
printf("%d = %d\n",i, Boolean.boolean);
}
return 0;
}
|
structでビットフィールドを宣言する。「unsigned boolean: 1」の「1」は1ビットのこと。このビットフィールドbooleanに10進数を0から9まで入れていって、表示させてみると以下のようになる。
0 = 0
1 = 1
2 = 0
3 = 1
4 = 0
5 = 1
6 = 0
7 = 1
8 = 0
9 = 1
|
ビットフィールド
また上記の宣言部分をunsignedではなくintにすると、プラスマイナスを扱うようになるので、1ビットの場合は0か-1というかたちになる。
#include <stdio.h>
struct{
int boolean: 1;
}Boolean;
int main(void){
Boolean.boolean;
int i;
for(i=0; i<10; i++){
Boolean.boolean = i;
printf("%d = %d\n",i, Boolean.boolean);
}
return 0;
}
|
0 = 0
1 = -1
2 = 0
3 = -1
4 = 0
5 = -1
6 = 0
7 = -1
8 = 0
9 = -1
|
C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら