(11)06/29の授業内容

trr試験

授業開始20分後から開始します(2限は11:00,3限は13:20).テキストは日本国憲法で,制限時間は20分間.この時間内にマークした最高得点を評価対象とします

  1. 2進数と16進数
  2. コンピュータの内部では,文字も数字も全て1と0の2進数で保存されています.1と0の2種類の情報であればスイッチのオン/オフや,磁極の向き,光の点滅で表現することが可能です.私たちが日常的に使用している10進数をコンピュータでそのまま取り扱うことを考えた場合,10種類の情報の表現方法を考えなければならず,装置の複雑化,大型化をまねくことになります

    2進数は0と1だけを使用しますので,0の次は1,1の次は1桁繰り上がって10になります.下記に10進数との対応表を示します

    2 進 数10 進 数16 進 数
    000
    111
    1022
    1133
    10044
    10155
    11066
    11177
    100088
    100199
    101010a
    101111b
    110012c
    110113d
    111014e
    111115f
    10000 1610

  3. 2進数と10進数の変換
    1. 10進数を2進数へ
    2. 10進数から2進数への変換方法

    3. 2進数を10進数へ
    4. 2進数から10進数への変換方法

  4. 16進数と10進数の変換
    1. 10進数を16進数へ
    2. 16進数から10進数への変換方法

    3. 16進数を10進数へ
    4. 10進数から16進数への変換方法

  5. Rubyでの取り扱い
  6. Rubyでは,数値の先頭につける記号で何進法かを指定します

    接頭語なし:10進数(例えば,10,25)

    接頭語0b:2進数(例えば,0b1001,0b111101)

    接頭語0x:16進数(例えば0x1a1,0xf)

    なお,何進数で指定しても一旦読み込まれれば,全て10進数で取り扱われます.出力する際に何進法とするかは,printfの書式制御文字によって指定可能です

    %d:10進数

    %b:2進数

    %x:16進数

  7. ASCIIコード
  8. コンピュータ内では文字は1と0の組み合わせで管理されている.この数字と文字の対応表のことを文字コードといいます

    半角英数字は,数字,大文字小文字のアルファベット,?#$%などの記号により構成され,2進数8桁である8ビットで表現されます(ただし先頭の1桁は使用していないので実際には7桁).半角英数字の文字コートをASCIIコードといいます.一方日本語は漢字が含まれるため8ビットでは表現できず,16ビットで表現されます.文字コードはJIS,Shift-JIS,EUCが代表的です.1種類ではないため,使用する環境により文字化けが生じることがあります.Webページを見ていてへんな文字列が表示されるのは,htmlファイルを作成した際の文字コードと,閲覧しているときの文字コードが異なるためです.作成者は文字コードとして何を利用しているかhtmlファイル内に記載する必要があるのですが,書き間違えるとこうした現象が生じます

    ASCIIコードの表は下記の通りです.この表では16進数での文字コード表記になっています.2進数で書いてもかまいませんが,桁数が多くなるため表が大きくなってしまいます

    ASCIIコード

    行方向(左側)が10の位,列方向(上側)が1の位になります.例えば,Aは41になります.Rubyでは16進数は0xをつけるのでAは0x41になります

    0行と1行(0x00〜0x1F)は制御文字をあらわします.主に端末のコントロールをするもので代表的なものは下記の通りです

  9. 文字列と文字コード
    1. 文字コードに対応する文字を出力
    2. %c:printfの書式制御文字の%cは,文字コードに対応する文字を出力します

      printf "%c", 0x07

      とすると,文字コード0x07すなわちBELが出力され,端末のベルがなります

    3. 文字に対応する文字コードを出力
    4. 特定の文字の文字コードを知るためには?文字とします.例えばプログラム中で?Qとすれば,それはQの文字コード(0x51)を書いたのと同じことになります

      これをprintfの制御文字である%x(16進数)で表示すれば,対応する文字コードがあきらかになります

      しかし,この方法では1文字の文字コードを調べるのは簡単でも,文字列を構成する各文字の文字コードを調べるのはやや面倒です

      文字列"Koeki"を構成する"K""o""e""k""i"の各文字の文字コードを調べることを考えてみましょう.ここでは配列のときと同じように[]を利用すると簡単に取り出すことができます

      printf "%x\n", "Koeki"[i]

      上記のようにインデックスにiを使用し,初期値を0とした上で,whileの繰り返しの中でiの値を1ずつ変更していけば構成する文字の文字コードを全て明らかにすることができます.もちろん下記のように文字列を変数に代入してもかまいません

      a = "Koeki"

      printf "%x\n", a[i]

課題

以下の5つの問から実施したいものを選んで実施する

  1. 0x1f8b(16進数),0b110011010(2進数)を10進数に変換せよ(計算過程を示すこと)(各1点)
  2. 0x135 + 0x67の計算を行った結果を10進数,2進数,16進数で示せ(計算過程を示すこと)(各1点)
  3. 自分の誕生日の西暦年,月,日を全部足した数を2進数と16進数に直せ(計算過程を示すこと)割り算は)と-を駆使して書くこと(各1点)
  4. ローマ字で書いた自分の名前の文字列を全て文字コード (16進数)で表記せよ(1点)
  5. キーボードから入力した任意の半角英数字で構成される文字列を文字コード(16進数)に変換して出力するプログラムを作れ(2点)

作成したプログラム,実行結果をメールでnaoya@e.koeki-u.ac.jp宛に送る.

課題の提出期限は7月2日(土)17:00まで


メール送信時の注意

Tips

emacsについて

Mewについて