1.0x143fを10進数へ
0x143f→4桁
・16**3 16**2 16**1 16**0
・4096 256 16 1
・1 4 3 f(15)
・4096+1024 + 48 + 15 = 5183
答え 5183
2.0b10011011を10進数へ
0b10011011→8桁
・2**7 2**6 2**5 2**4 2**3 2**2 2**1 2**0
・128 64 32 16 8 4 2 1
・1 0 0 1 1 0 1 1
・128+ 0 + 0 + 16 + 8 + 0 + 2 + 1 = 155
答え 155
3.0x146 + 0x67を10進数へ
0x146→3桁
・16**2 16**1 16**0
・256 16 1
・1 4 6
・256 + 64 + 6 = 326
0x67→2桁
・16**1 16**0
・16 1
・6 7
・96 + 7 = 103
326 + 103 = 429
答え 429
4.0x146 + 0x67を2進数へ
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
---
2) 0
答え 110101101
5.プログラム
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
i = 0
name = []
print"ローマ字で書いた氏名を16進数に変換します\n"
print"ローマ字で入力してください\n"
name = gets.chomp!
while i < name.length
printf("%c %x\n",name[i],name[i].ord)
i += 1
end
6.プログラムの説明
今回はユーザーが入力した名前の各文字の文字コードを調べると考える。
そのため、配列を使い[]を利用することで簡単に任意の文字コードを取り
出すことができる。
lengthメソッドは配列の中に代入している値の数を返してくれるメソッド
である。入力してもらった名前(i)がすべて文字コードに変換された時点で
while end の繰り返しは終了する。
%cとは文字コードに対応する文字を出力する。そして、16進数に変化させる
ため%xとも入力する。これに対応するものとして、name[i]とname[i].ordが
ある。.ordとは、文字列の文字コードを返すメソッドである。
i += 1は、iに16進数の値が代入されているため、1ずつ増加されていく。
7.プログラムの実行結果
ローマ字で書いた氏名を16進数に変換します
ローマ字で入力してください
aso izumi
a 61
s 73
o 6f
20
i 69
z 7a
u 75
m 6d
i 69
8.感想
計算自体は簡単にすることができた。ただ、進数同士の足し算の
やり方がわからなくて苦労した。やり方を検索しても難しくて理解
できなかった。そのため、10進数に直してから計算したが、他にもっと
簡単なやり方がないのか気になった。
問5はとても難しくて、友だちに聞きながら行った。最終的には、プログラム
を教えてもらった後に理解することができた。そのため、似たようなプログラム
になってしまった。他にもやり方があるなら知りたいと思った。
9.参考文献
友人のプログラム