課題51


  1. 次のソースプログラムを kadai51.c というファイル名で作成してください。

    /*
    ** プログラム名: kadai51
    ** 動作: 共用体を使ったデータの切り出し
    ** 作者: 自分の名前、学籍番号
    ** 日付: 今日の日付
    */
    #include <stdio.h>
    
    union reg {
        struct {
            unsigned char h, l;
        } b;
        unsigned short x;
    };
    
    int main(void)
    {
        union reg a;
    
        a.x = 2000;
    
        printf("a.b.h = %d, a.b.l = %d\n", a.b.h, a.b.l);
        printf("a.b.h * 256 + a.b.l = %d\n", a.b.h * 256 + a.b.l);
        printf("a.x = %d\n", a.x);
    
        return 0;
    }
    

  2. このソースプログラムをコンパイル/リンクし、 kadai51 という実行プログラムを作成してください。

  3. kadai51 を実行してください。

  4. kadai51 を実行すると、 a.b.h * 256 + a.b.l と a.x が等しくなります。 その理由を考察し、メールで tokoiまで送ってください。 Subject: は kadai51 としてください。

  5. なお、kadai51 の実行結果は、 パソコン(インテルの CPU を使用したもの)では a.b.h * 256 + a.b.l と a.x が等しくなりません。 すなわち、このようなプログラムは「移植性」に問題があるため、 あまりよいプログラムとは言えません。