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

ディスカッション
コメント一覧
まだ、コメントがありません