1.
0x143f→5183
〔1〕16**3 16**2 16**1 16**0
〔2〕4096 256 16 1
〔3〕1 4 3 f(15)
〔4〕4096 1024 48 15
4096+1024+48+15=5183
2.
0b10011011→155
〔1〕2**7 2**6 2**5 2**4 2**3 2**2 2**1 2**0
〔2〕128 64 32 16 8 4 2 1
〔3〕1 0 0 1 1 0 1 1
〔4〕128 0 0 16 8 0 2 1
128+0+0+16+8+0+2+1=155
3.
0x146+0x67→429
0x146は
〔1〕16**2 16**1 16**0
〔2〕256 16 1
〔3〕1 4 6
〔4〕256 64 6
256+64+6=326
0x67は
〔1〕16**1 16**0
〔2〕16 1
〔3〕6 7
〔4〕96 7
96+7=103
合計
326+103=429
4.
0x146+0x67→110101101
2) 429 1
____
2) 214 0
____
2) 107 1
____
2) 53 1
____
2) 26 0
____
2) 13 1
____
2) 6 0
____
2) 3 1
____
2) 1 1
____
0
5.問5のプログラム
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
name = []
i = 0
print"あなたの名前を16進数に変換します。\n"
print"あなたの名前をローマ字で入力してください。\n"
name = gets.chomp!
while i < name.length
printf("%s %x \n",name[i],name[i].ord)
i += 1
end
6.問5のプログラムの説明
1行目:rubyインタプリンタのあるディレクトリを指定している。
2行目:日本語文字コードがEUC-JPであることを示している。
4行目:今回は文字列を構成する各文字の文字コードを調べるので配列の時と同様
に[]を利用する。name(変数)が配列であることを宣言する。
5行目:iに0を代入するように指定。(初期値は0。)
7行目:""の内のメッセージを表示するように指定。\nで改行も行う。
8行目:7行目と同様。
9行目:gets.chomp!メソッドを使用することでキーボードからの入力を文字列と
して取得する。改行文字(\n)があれば取り除く。
11行目:whileを使用し、繰り返しを始める。配列のデータ数だけ繰り返す。
name.lengthメソッドとすることでname(配列変数)の中に代入されている
値を表示するようにする。
12行目:printfメソッドを使用し後ろに指定した""内のメッセージを表示するが、
その際に%s(対応する値を文字列に置き換えるためのメソッド)、%x(16
進数の文字コード表示するためのメソッド)のそれぞれの位置に""の後ろ
で指定した変数(name)に代入された値を入れ込んで表示する。文字列の
文字コードを知りたいので文字列[i]として文字列を配列扱いとして、イ
ンデックスを変更することで0文字目、1文字目、2文字目といった具合に
順番に取り出していく。
13行目:繰り返しが行われるたびにiの値が1ずつ増えるように指定。
14行目:whileに対応するend.繰り返しが終了する。
7.問5の実行結果
broy{c115xxx}% ./report7.rb [~/program]
あなたの名前を16進数に変換します。
あなたの名前をローマ字で入力してください。
inouemichitaka
i 69
n 6e
o 6f
u 75
e 65
m 6d
i 69
c 63
h 68
i 69
t 74
a 61
k 6b
a 61
8.感想
今回もプログラム作成が辛かった。計算の方はなんとか理解できた。
9.参考文献
基礎プログラミング第6回
基礎プログラミング第9回
Ruby プログラミング 基礎講座 P34、P50
石垣智隆さんによる指導
10.作成したプログラムの添付