ビットフィールド

昨日の説明だけでは分かりにくかったので、覚え書きの意味もこめて説明しよう!

struct bit_test{
	char a:1;
	char b:1;
	char c:6;
};

union union_test{
	struct bit_test;
	char aaa;
};

と定義されているとする。この時

aaa = 0xC0;

とすると、a,b,c の値は幾つになるか?と言うお話。

x86系では昨日説明したとおり、LSBからビットフィールドが割り当てられるので

7 6 5 4 3 2 1 0
c b a

となるが、SH系だとMSBから割り当てられるので

7 6 5 4 3 2 1 0
a b c

と異なる。この為、0xC0を代入したときの結果は、x86系では a = 0, b=0, c=0x30 になり、SH系では a = 1, b = 1, c = 0 と異なった結果になってしまう。

って言うお話だよ。

追記:違ったらしい。正しくはコンパイラ依存らしいぞ!