ビットフィールド
昨日の説明だけでは分かりにくかったので、覚え書きの意味もこめて説明しよう!
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 と異なった結果になってしまう。
って言うお話だよ。
追記:違ったらしい。正しくはコンパイラ依存らしいぞ!
ディスカッション
コメント一覧
まだ、コメントがありません