|
|
|
|
|
|
|
|
直前講義
|
@ 再帰的
再帰的とはどうゆう意味でしょうか?これは自分自身を呼び出すという意味です。。
下記の図のように関数Aが自分自身を何度も呼び出すような形の事をいいます。。
↓
↓
→|→|→|→|→
A A A A・・・
←|←|←|←|←
↓
↓
当然のことですが、関数の中ではn=0になるまで等の無限ループにならない条件も含まれています。。
このような処理を実現させる為に最も適切なデータ構造は以前お話ししたスタックになります。。
雑学.1
以前のおさらいをします。。
スタック:最後に格納されたデータが最初に取り出される。
キュー:最初に格納されたデータが最初に取り出される。
これらと同じようなデータ構造を追加します。。
配列:添字を用いて特定のデータを参照する。
木:二つ以上のポインタを用いてデータの階層関係を表現する。
A 2分木 ・・・ 木構造(ツリー)←→階層構造
上記雑学.1で記載した木の事ですが、図にすると以下のようになります。。
A <2分木の配列表現>
/ \ 添字 値 ポインタ1 ポインタ2
B C 1 A 3 2
/ \ 2 C 0 0
D E 3 B 5 4
/ 4 E 0 0
F 5 D 6 0
6 F 0 0
雑学.2
2分木(バイナリツリー)とは木構造で枝が2本以下の事を指しましたが、
必ず枝が2本存在すると完全2分木という名前になります。。
B リスト
1.線形リスト:配列の事です。。削除・挿入が苦手です。。
A(0) A(1) A(2) ・・・
2.連結リスト:配列にアドレスが付いています。。
アドレス順(アドレス データ ポインタ)
0A(0)2 1A(1)3 2A(2)1 3A(3)4 ・・・
連結順
A(0) A(2) A(1) A(3) ・・・
今回紹介したのは片方向連結リスト(単方向連結リスト)です。。
上記に対して両方向連結リスト(双方向連結リスト)というのもあります。。
両方向連結リストとはデータに対しもう一つポインタを付けてそのポインタは前データのアドレスを格納するのに使います。。
C グラフ
こやつもAB同様データを格納する方法ですが、複雑なので下の図を見てイメージだけ掴んどいて下さい。。
A
/
B―――C
\ /
D
D 探索(サーチ) ・・・ 検索ともいう
探索には以下の種類があります。。
1.線形探索
リストデータを順次探索する方法ですが、最終的に目的のデータが検索するリストに存在しないとエラーになってしまいます。。
このエラーを回避するためには番兵が有効です。。
番兵:線形探索法で必ず見つかるようデータの最後に探すデータを入れておくこと。。
探索時間:データ数がn個の時でもし最後までデータが見つからないとn回探索する事になります。
データの先頭に探索データがある場合には1回探索することになります。。
よってその平均n/2が探索速度になります。。
2.2分探索法
整列されているデータを半分に割り、どちらに含まれるかを判断する。。そして含まれる方を再び半分に・・・
の様に探索する方法です。。
探索時間:データが2個の時に1回、4個の時に2回、8個の時に3回・・・n個の時に
つまりlog2 2、log2 4、log2 8・・・log2 n
よって、log2 nが探索速度になります。。
3.ハッシュ
ハッシュとはハッシュ関数を使ってダイレクトに目的のデータにアクセスする方法です。。
例 9576を使って目的のデータを探索せよ!!
↓
9 + 5 + 7 + 6 = 27 / 5 = 2
↑
ハッシュ関数
といった具合に使います。。が、見て分かるように同じ結果になる場合が存在します。。
9765のような場合です。。このように結果が同じになる事をシノニム(バッティングする事)といいます。。
実際はシノニムが発生しないような値をハッシュ関数として用意します。。
探索時間:1です。。
E 整列(ソート)
整列には降順(大きい順)と昇順(小さい順)があります。。これぐらい知ってるって?
それでは整列させる方法をこれから紹介します。。
1.シェルソート
ある間隔で要素を取り出した部分列を整列し、更に間隔をつめた部分列を取り出して整列する方法である。。
番号:ABCDABCDABCDABCD・・・
まずAだけを並び替え、次にBを・・・Dまでやったら今度は
番号:ABCABCABCABCABCA・・・
で上記と同様に並び替える。。この操作を繰り返す。。
2.バブルソート
隣り合う要素を比較して、大小の順が逆であれば、それらの要素を入れ替えるという操作を繰り返して行う方法である。。
番号:ABCDEFGHIJK・・・
まずAとBを比較して、次にBとCを比較と順次繰り返していく方法です。。<今回の説明ではAとBは入れ替わらない
3.クイックソート
中間的な基準値を決めて、それより大きな値の要素を集めた区分と小さな値の要素を集めた区分とに振り分ける。
次にそれぞれの区分の中で同様な処理を繰り返す方法である。。
○○○○○○○○○○○○○○○○
○○○○○○○○ ○○○○○○○○
○○○○ ○○○○
○○ ○○
○ ○
このソートでは再帰を利用しています。。
4.ヒープソート
未整列の部分を部分木で表し、そこから最大値又は最小値を取り出して既整列の部分に移す。
この操作を繰り返して、未整列部分を縮めてゆく方法である。
ヒープツリー
1
/ \
3 5
/ \ / \
7 10 6 12
/ \
13 16
5.基本選択法
データ中の最小値を求め、次にそれを除いた部分の中から最小値を求める。この操作を繰り返していく方法である。。
6.マージソート
2つ以上のファイルをマージする。。
最後は大分駆け足になってしまいましたが、以上で今回の試験直前講義は終了です。。
後は全力を尽くすのみ、今回手に入れた攻撃オプションはきっと役に立つことでしょう。。
更新日時: 2001/10/20
|
第九回
|
直線も残すところ200mを切りました。。Jリーグではアントラーズが終了間際に決勝ゴールを上げました。。
こちらも負けてられないぞぉ〜
前回プロトコルという言葉を使いましたが、その説明がありませんでしたね。。
今回はその説明から入ります。。
@ プロトコル
プロトコルとは通信規約の事です。。
通信規約:データ通信において相手の事を考えずにガンガン送っていたら相手は困ってしまいますよね。。
どんなデータを送ってきたのか?文字なのか絵なのかそれをとり決めた規約の事です。。
A OSI基本参照モデル
OSI基本参照モデルとはプロトコルの実体です。。
7 アプリケーション層 \
6 プレゼンテーション層 〉FTP,telnet,SMTP,POP
5 セッション層 / 同期(DATAの始まり終わり) ゲートウェイで接続
----------------------------------------------------------------------------------------
4 トランスポート層 TCP (ポート番号)
3 ネットワーク層 IP (アドレス) ルータで接続
----------------------------------------------------------------------------------------
2 データリンク層 CSMA/CD方式 etc ブリッジで接続 (ハブ)
1 物理層 10BASE-Tx etc リピータで接続
雑学.1
スイッチングハブ:ハブにルータの機能を持たせたもの
B 電気通信事業者
電気通信事業者について説明します。。ただ言葉で書くよりも表にした方が分かり易いので下記の表をご覧下さい。。
大臣の許可 国際通信 回線設置
― 第一種(NTT, KDDI etc) 必要 可 可
― 第二種
|
|――― 特別第二種 登録 可 不可
|
|――― 一般第二種 届出 不可 不可
雑学.2
1.ISDNの基本インターフェース
利用者宅内では、バス配線構成にすることによって、同種の機器に限って複数台を接続できる。。
2.パケット交換
回線交換と比較して、網内遅延時間が短い。。
C オブジェクト指向
オブジェクト指向とは?下記の機能を実現しようとする考え方です。。
1.カプセル化
オブジェクト指向プログラムにおいて、データとメソッドを一つにまとめ、
オブジェクトの実装の詳細をユーザから見えなくしてしまう事をいいます。。
2.インヘリタンス
上位の機能を受け継ぐこと
3.ポリモフィズム
多態(様,形)性のこと
オブジェクト指向を理解するにはもっともっと勉強が必要ですねぇ。。反省・・・
更新日時: 2001/10/20
|
第八回
|
@ パリティ(偶奇性)…パリティチェックとは偶数か奇数かのチェックを行う事でしたね。。
例.偶数パリティ
パリティビット(垂直パリティ)
↓
10100101
10101100
・
・
・
10101010
--------------------
01011011 ←パリティビット(水平パリティ)
特徴:1bitのエラーのみ発見できる。。
バーストエラー(複数のエラー)は発見できない。。
A 調歩同期
スタート・ストップビットの負荷をする事です。。
例えばASCIIコードの文字1文字を調歩同期させるという事は、
1文字:文字(7bit) + パリティ(1bit) + スタート・ストップ(2bit) = 10bit
つまり文字1文字で10bit必要になります。。
雑学.1
7ビットからなる文字を、80文字を1ブロックとして、水平垂直パリティ付き、
歩調同期方式(スタート・ストップ信号はそれぞれ1ビット)で電送する。
800文字のデータを電送する場合、送られるビット数は幾らでしょう。。
(解答)上記Aで書いたように1文字で10bitかかります。。
1ブロックでは一体幾らかかるのでしょうか?
1ブロック:80文字 + 1文字(水平パリティ) = 10bit × 81文字 = 810bit
800文字:10ブロック = 810bit × 10ブロック = 8100bit
B モデム(Modulator and Demodulator)
モデムとはアナログ伝送を行うために変調と復調を行う装置の事です。。
モジュレート:変調
デモジュレート:復調
−パソコン− −電話回線−
変 調
→ → →
ディジタル信号 アナログ信号
← ← ←
復 調
C DSU(Didital Service Unit) ←→ モデム
DSUとはデジタル伝送用の装置です。ISDN等で使われています。。
パソコンのデジタル信号を → 通信用のデジタル信号に変換
雑学.2
1.PCM(パルス コード モジュレータ)
音声をディジタル化する方式で、主にCDやMDで使われています。。
2.変調速度(baud:ボー)
3.通信速度(bps:bit/sec)
D DCE(Data Circit Equipment)
DCEとは回線終端装置の事で、BCの総称です。。
E DTE(Data Terminal Equipment)
DTEとはデータ端末装置の事で、PC端末やモバイル機器の総称です。。
F NCU(Network Control Unit)
NCUはアナログ回線と交換回線の間に取り付ける装置です。。
−DTE− −DCE−
PC端末 → モデム → アナログ回線 → NCU → 交換回線
PC端末 → DSU → ディジタル回線
雑学.3
1.PAD(パケット アセンブル ディスアセンブル)
PADとはパケット(小包)通信用の装置です。
特徴:異速度端末間の通信が可能です。。<同報通信>
2.TDM
TDMとは時分割多重化方式(装置)の事です。。
時分割多重化方式とはDATA量の多い人も少ない人も同じ時間が割り当てられる通信方法で非効率な通信方法です。。
時間が割り当てられるとはどうゆう事?
LAN回線等で回線を使用しても良い時間帯のことです。。分や秒といった単位ではなくもっと細かい時間ですが・・・
G LAN(ローカル エリア ネットワーク) ←→ WAN(ワールド エリア ネットワーク)、MAN(メトロポリタン エリア ネットワーク)
言わずと知れたローカルなネットワークの事です。。何のこっちゃ?
簡単に結うと端末と端末とをLANケーブルと呼ばれるものをイーサネットに繋いで通信を行うものです。。
H IEEE802.3
IEEE802.3とはEthernet(イーサネット)の事です。。
CSMA/CD方式(キャリア センス 多重化/コリジョン(衝突) ディテクション)というプロトコルを利用した通信方法を使います。。
I CSMA/CD方式
CSMA/CD方式とはノードが送出した信号の衝突を検知した場合、ある時間待機して信号を再送出する。。
短所:ネットワークデータ量が増加するとコリジョンが大発生し、送信時間が長くなる。。
J トークンパッシング(巡回)方式(FDDI) ←→ CSMA/CD方式
各ノードは、フリートークンを受けるまで通信できない。。
LANのトポロジー(分類型)
1.トークンリング型
○ ○
| |
| ̄ ̄ ̄ ̄ ̄|
○―| → → |―○
|↑ ↓|
○―| ← ← |―○
|_____|
| |
○ ○
2.トークンバス型
○ ○
| |
―――――――
| |
○ ○
3.スター型
○
|
○―| ̄|―○
|_|
/ \
○ ○
K LANケーブル
ケーブルには以下の種類がある。。
名称 転送速度 ケーブルの特徴 用途
10BASE-5 10Mbit/sec 最大500m −同軸ケーブル バス型
10BASE-2 10Mbit/sec 最大200m(185m)−同軸ケーブル バス型
10BASE-T 10Mbit/sec ツイストペア −より対線 スター型
100BASE-Tx 100Mbit/sec ツイストペア −より対線 スター型
100BASE-Fx 100Mbit/sec 光ファイバ
更新日時: 2001/10/20
|
第七回
|
構造化プロクラミング
@ 構造化
プログラムを機能(モジュール)ごとに分割する。。
ここでいうモジュールとは、関数・クラスの事を指しています。。
A 結合度
モジュール同士の結びつきの事です。。
B データ結合
データをパラメータ(引数)で渡し合う結合の事です。。
基本的にデータ結合は結合度が弱い程良いとされています。。
雑学.1
モジュール間の結合には以下のものがあります。。
外部結合
共通結合:メモリの一部を共有する結合
制御結合
データ結合
C システム
それではシステムとは一体どういうものなのでしょうか?
システムはいくつかのプログラムが集まって構成されています。。
これらシステムを機能ごとに分割したものをサブシステムと言います。。
サブシステム ←→ プログラム
さらにプログラムを機能ごとに分割したものをモジュールと言います。。
D テスト
システムを作成していく上でいくつかのテストを行っていきます。。
テストを行う順番はそのテストの規模によって決まっています。。
1.単体テスト(各モジュールのテスト)
2.結合テスト(モジュール間やサブシステム間のインターフェースを検証する)
3.システムテスト
4.運用テスト
の順に行います。。
E 単体テスト
単体テストには下記2つの方法があります。。
1.ブラックボックステスト(ユーザ参加のテスト・・・エンドユーザ)
限界値分析・・・最大・最小・最大最小+1
原因-結果グラフ・・・原因(入力),結果(出力)
実験計画法
同値分割・・・入力データのクラス分けテスト
2.ホワイトボックステスト
条件網羅・・・フローチャート全て
命令網羅
○○網羅・・・網羅と付くテストは全てホワイトボックステストである。。
F 結合テスト
モジュールには上位モジュールと下位モジュールが存在します。。どういったものか下記に記します。。
モジュール:M
M1 上位モジュール
↓ ↓ トップダウンテスト
← →
↓ ↓ ↓
MA MB MC
↓
← →
↓ ↓ ↑ ボトムアップテスト
Ma Mb 下位モジュール
トップダウンテスト:上位モジュールから順にテストを行う。。
上位モジュール(M1)のテストを行う時に未完成の下位モジュール(MC)の代わりに使うものをスタブと言います。。
ボトムアップテスト:下位モジュールから順にテストを行う。。
下位モジュール(Ma)のテストを行う時に未完成の上位モジュール(MA)の代わりに使うものをドライバと言います。。
折裏テスト:トップダウンテストとボトムアップテストの2つを組み合わせてテストを行うことを言います。。
ビックバンテスト:トップダウンやボトムアップを考えずに全てを一気にテストする事を言います。。
レグレッションテスト:退行テストの事で、バグ修正の後などにその修正の結果今まで正常に動作していた所がバグっていないか確認するテストの事です。。
G その他
1.スナップショット(ダンプ)
指定した命令が実行されるたびに、レジスタや主記憶の一部の内容を出力することによって、正しく処理が行われていることを確認する。。
2.デバッガを使ったデバッグ
プログラムの実行中、必要に応じて変数やレジスタなどの内容を検査し、必要であればその内容を修正した後、後続の処理のテストを行う。。
H いろいろなチェック
1.ニューメリック(データチェック)
数値として扱う必要のあるデータに、文字などの数値として扱えないものが含まれていないかをチェックする。。
2.照合チェック
レコードのキーを突き合わせて検査する。。
3.フォーマットチェック
形式や様式のチェック
4.サイトチェック
人の目で見て検査する。。
5.チェックディジットチェック(パリティチェック etc)
一定の規則に従ってデータから検査文字を算定し、データにその検査文字を付加することによって、入力データをチェックする。。
6.バランスチェック
販売数と在庫数と仕入れ数の関係など、対となる項目の値に矛盾がないかどうかをチェックする。。
7.重複チェック
マスタファイル作成時の入力データ中に、同一キーのレコードが複数個あるかどうかをチェックする。。
8.トータルチェック
支店から本店への売上データの電送処理において、全てのデータが電送されているかどうかをチェックする。。
9.リミットチェック
入力データの値が規定の範囲内かどうかを検査するチェック方式
I ソフトウェアの品質特性
1.信頼性
ソフトウェアに要求された機能の実行が、所定の状況下で正常に維持されるかどうかを表す。。
2.使用成(操作性)
操作や習得の容易さを表す。。
3.保守性(メンテナンス)
ユーザからの変更要求や障害への対応のしやすさを表す。。
4.移植性
ソフトウェアを別のコンピュータ環境で使用するときに必要な変更の度合いを表す。。
雑学.2
上記の他に機能性や効率性といったものも含まれる。。
更新日時: 2001/10/18
|
第四回
|
最後の直線で鞭の叩き合い果たしてこのレースを征することは出来るのか?
早速始めましょう。。
@ パリティビットってなに?
馬の名前!!っと答えそうな君、それは間違いです。。<ダビスタ
パリティとは偶奇という意味です。。つまりパリティビットとは偶数にする為のビット、又は奇数にする為のビットの事を指しています。。
どういう事か分からないって?・・・それではまずパリティビットが何をする為に存在するのか教えましょう。。
簡単に言ってしまえば間違い探しをする為に付いているビットの事です。。例を上げると・・・
1010011 ← 左のようなSを表すASCIIコードがあります。。これに対してエラーが発生したかどうかを確認する為に1ビット付加します。。
01010011 このように0を付加した場合1の数が偶数になります。。今回のようなパリティを偶数パリティビット
11010011 このように1を付加した場合1の数が奇数になります。。今回のようなパリティを奇数パリティビット
のように使用します。。お分かり頂けたでしょうか?
パリティビットの欠点はビット列に2つ以上エラーが発生した場合に判断できなくなってしまう点にあります。。
とにもかくにも偶奇を判断対象にするエラーチェックさんなのです。。分かり辛くてゴメン・・・
A スタックとキュー
まず簡単に説明してしまうと、データを処理する為の方法を示した言葉です。。 具体的にどういう事かというと・・・
X・Y・Zとそれぞれ名前の付いた箱があるとします。箱Xに○が、箱Yに△が入っている時にXとYの箱の中身を入れ替えようとすると、
コンピュータでは始めに箱Xの○を箱Zに入れて、箱Yの△を箱Xに入れます。その後箱Zから箱Yへ○を入れるという作業をします。。
この時登場する箱Zの事を説明している言葉だと思って下さい。。
それではそれぞれの言葉の意味です。。
スタック(後入れ先出し) … LIFO の事です。。
キュー(先入れ先出し) … FIFOの事です。。
言葉のままなので説明は不要ですよね。。
スタック キュー
格納 プッシュ エンキュー
取出し ポップ デキュー
次回予告
アルゴリズムについて・・・
アルゴリズムには下記のように2つの考え方があります。
@ ソート(整列):並び替え
A サーチ(探索・検索)
それではソートにはどういったものがあるのでしょうか?
@ バブルソート(基本交換法):単純だが処理が遅い
A シェルソート
B クイックソート:とても複雑だが処理がもっとも早い
その他にもいくつかありますが、上記のような事をやるのだと思って下さい。
更新日時: 2001/10/18
|
第三回
|
お久しぶりです。
アメリカのテロ事件の影響で休校になっていましたが、再開いたします。。< 嘘
気が付けば早いものでもう試験が近づいてまいりました。。
そろそろ追い込みをかけなければなりませんね。。
それでは本日の講義を始めます。。
今回は試験に使われる単語の意味を紹介していきます。
@ BCDコード(2進化10進符号)
BCDコードって何だぁ? → 10進数1桁を4ビットで表したものの事です。。
(1ビットは2進数1桁で表される。)
ここで必要になってくるのは前回までの知識です。。
BCDコードと言われた場合、必ず2進数でかかれた数字列が傍にあるはずです。。
例えば、100100010101といった具合の2進数がついてきます。。
10進数1桁を4ビットで表したものとあるので、上記2進数を右側から4ビット毎に区切ります。。
1001 0001 0101 → 9 1 5
10進数で915というのがBCDコードの読み方になります。。
雑学.1
前回講義の最後で示した表を覚えているでしょうか?
それでは問題です。。
16進数の[2A4C]を2進数に直しなさい。。
2 A 4 C → 0010 1010 0100 1100
覚えてましたかぁ?
それではほんの少しステップアップして・・・
8進法で5桁の全ての自然数を10進数及び2進数で表現するには、少なくとも何ケタ必要か?
ここで最重要ポイントは[5桁の全ての自然数]ということです。。
つまり、77777<8>を表現する為にはどうすればよいのか?ということです。
簡単に言ってしまえば、100000-1<8>を表現する為にはどうすればよいのか?となります。
8の5乗は10進数及び2進数では何ケタになるのでしょうか?
10進数:8^5=10^n → n=log10 8^5
2進数:8^5=2^n → n=log2 8^5
が解答になりますが、10進数は確かに電卓をたたけば簡単に解けますよねぇ。。
しかし2進数はどうでしょう。。このままだと辛いですよねぇ。。よって以下のように解きます。。
2進数:8^5=2^n → (2^3)^5=2^n → 2^3*5=2^n → 2^15=2^n
これなら簡単ですよねぇ。。
A IEEE754(1985)標準 (浮動小数点)
SEM で表記する形式のこと
S:符号,1ビット
E:指数部,8ビット
M:仮数部,23ビット
雑学.2
2進数の演算方法を知っていますか?
論理積 論理和 否定 否定論理和
0011 0011 0011
AND 0101 OR 0101 NOT 0101 NOR 0101
---------- ---------- ---------- ----------
0001 0111 1010 1000
B マスクビット
必要な情報を取り出すためにビットごとのAND演算を行う際に使うビットのこと
11011010
AND 01110000 <<・・・ 左2番目から4番目を取り出すマスクビット
--------------
01010000
C 論理シフトと算術シフト
皆さんシフトって知ってますか?単純に移動させるって事なんですが、コンピュータの世界では2種類の移動方法があります。
例を上げた方が分かりやすいので下記をご覧下さい。
例.8ビットの固定小数点レジスタ[11110000]を左へ3ビットシフトさせるとどうなるか?
普通にシフトさせると[11110000]→[00011110]となります。。つまり全体を移動させた後に空いたところに0を埋め込んでいきました。
上記みたいなシフトのことを論理シフトといいます。。
ではでは、算術シフトとはどういったものでしょうか?
上記の例を使い今度は算術シフトさせると[11110000]→[11111110]となります。
どうゆう事かというと、一番左の値を固定したまま移動させて空いた所に固定したものを埋め込んでいったのです。
今回は一番左に1があったので1を埋め込みましたが、0の時は0を埋め込みます。
手書きでやってみると結構分かり易いと思います。。HPには限界が・・・
10000000 00001111
--------------------------------------
論理シフト 00010000 00000001
算術シフト 11110000 00000001
雑学.3
上記Cのように右へ3論理シフトさせた値は実際には元の値と比べてどうなっているのでしょうか?
10000000を例として使ってみます。
10000000<2> = 128<10>右へ3論理シフトさせると
00010000<2> = 32<10>になります。。128は32の4倍ですね。つまり右へ3シフトさせることにより1/4になったのです。
2進数を表すときにどういった計算をしたのか思い出してみて下さい。
・・・+ 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 + 2^-1 + 2^-2 + 2^-3 + 2^-4 + 2^-5 +・・・
・・・+ 32 + 16 + 8 + 4 + 2 + 1 + 1/2 + 1/4 + 1/8 + 1/16 + 1/32 +・・・
勘の良い皆さんならもうおわかりですね。。そうです。。
2^0を基準に移動させただけなんですね。。ちなみに左にシフトさせる時も同様になります。。
またまた長くなってしまいましたが、今回の講義はここまでです。。
更新日時: 2001/10/17
|
第二回
|
第二回の講義になります。
前回の宿題は皆さん解けたでしょうか?
ムチャクチャ大変だったよぉ〜とか、
途中で止めちゃいましたぁ。。という方もいらっしゃるでしょうか?
簡単過ぎてあくびが出ちゃうよぉ!!なんて方も居る事でしょう。。
『簡単過ぎた!!』という方には今回の講義は眠くなるかもしれませんが、
解答です。。
<解答>
1111111011011100101110101001100001110110010101000011001000010000 <2>
そりではそりでは・・・前回お教えした方法を使って解いて行きます。
前回お教えした方法(あなたの攻撃オプション)は、
・10進数から2進数16進数への変換
・2進数16進数から10進数への変換
です。
したがって2進数から10進数へそして10進数から16進数へ変換して行く事になります。
まず小数点は一番右端にあるので、右から順に変換して行くと
= (2^0)*0 + (2^1)*0 + (2^2)*0 + (2^3)*0 + (2^4)*1 + (2^5)*0 + (2^6)*0 + (2^7)*0 + ・・・
もう勘弁してぇ〜と悲鳴を上げたくなりますね。
前回までの方法でも時間をかければ解く事は可能ですが、
あまりにも負担が大き過ぎて間違えてしまう可能性が出てきます。
そこで登場するのが2進数から16進数への変換です。
まず2進数とはどういったものだったでしょうか?
前回お教えしたように2のX乗を使って表した数値の事です。
0 <10> = 0 <2>
16 <10> = 10000 <2>
256 <10> = 100000000 <2>
同様に16進数とは16のX乗を使って表した数値の事です。
0 <10> = 0 <16>
16 <10> = 10 <16>
256 <10> = 100 <16>
今回あえてこのような数値を例にした事でわかった人もいるでしょう。
まだわかりませんか?
2進数と16進数の間には下記のような法則性があるのです。
10進数 通常変換 4桁(4bit)表記
0 <10> = 0 <2> = 0000 0000 0000 0000 <2>
0 <10> = 0 <16> = 0 0 0 0 <16>
16 <10> = 1 0000 <2> = 0000 0000 0001 0000 <2>
16 <10> = 1 0 <16> = 0 0 1 0 <16>
256 <10> = 1 0000 0000 <2> = 0000 0001 0000 0000 <2>
256 <10> = 1 0 0 <16> = 0 1 0 0 <16>
上記のように2進数4桁で16進数1桁を表せるのです。
前回の講義を見ただけで気付いた方も多いと思います。
ちょこっと例を紹介します。
2進数4桁の最小値 = 16進数1桁の最小値
0000 <2> = (2^3)*0 + (2^2)*0 + (2^1)*0 + (2^0)*0 = 0 + 0 + 0 + 0 = 0 = (16^0)*0 = 0 <16>
2進数4桁の最大値 = 16進数1桁の最大値
1111 <2> = (2^3)*1 + (2^2)*1 + (2^1)*1 + (2^0)*1 = 1 + 2 + 4 + 8 = 15 = (16^0)*15 = F <16>
2進数5桁目から4桁の最小値 = 16進数5桁目から4桁の最小値
0001 <2> = (2^7)*0 + (2^6)*0 + (2^5)*0 + (2^4)*1 = 0 + 0 + 0 + 16 = 16 = (16^1)*1 = 1 <16>
2進数5桁目から4桁の最大値 = 16進数5桁目から4桁の最大値
1111 <2> = (2^7)*1 + (2^6)*1 + (2^5)*1 + (2^4)*1 = 128 + 64 + 32 + 16 = 240 = (16^1)*15 = F <16>
そりゃそうですよね。16は単純に2の4乗なのですから・・・
(そうゆうわけでどんなわけでぇ〜)^2
この法則に習って宿題を解いていきましょう。。
ますは、問題を右から順に4桁ずつに区切っていきます。
1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 <2>
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 <10>
後はこいつを16進数に置き換えるだけです。
F E D C B A 9 8 7 6 5 4 3 2 1 0 <16>
こうやって見ると簡単ですよね。
<まとめ>
2進数 10進数 16進数
1111 - 15 - F
1110 - 14 - E
1101 - 13 - D
1100 - 12 - C
1011 - 11 - B
1010 - 10 - A
1001 - 9 - 9
1000 - 8 - 8
0111 - 7 - 7
0110 - 6 - 6
0101 - 5 - 5
0100 - 4 - 4
0011 - 3 - 3
0010 - 2 - 2
0001 - 1 - 1
0000 - 0 - 0
2進数と16進数の変換は上記表<まとめ>を覚えておいてください。。
2進数10進数16進数について多少はご理解いただけたでしょうか?
おおっ と思われる方、わけわからん と思われる方、はぁ〜 と思われる方、
いろいろいるとは思いますが、さらに詳しく知りたい方はメール下さい。。
「こんなんでわかるかい!!」とご立腹の方も居られるでしょが、
苦情・質問等はメールでお寄せくださいませませ。。
以上で今回の講義を終わりにします。。
キーン・コーン・カーン・コーン・・・
更新日時: 2001/10/17
|
第一回
|
第一回の講義になります。少しずつPCについて詳しくなっていきましょう。。
はじめに2進数10進数16進数について知っていますか?
コンピュータはこれらを使って演算処理をおこなっているのです。
それではわからない人&忘れてしまった人の為に簡単にですが説明しながら進めていきますね。。
Step.1 10進数を10進数に変換してみよう!!
って、おいっ!!変わって無いじゃん。。
と思われる方もいらっしゃるでしょうが、とにかくやってみましょう。。
<例>
2001.08 <10>(読み:二千・一・点・零・八)
まず整数部と小数部に分けます。
2001 + 0.08 <10>
そして整数部を10で割ります。
商 余り
2001 / 10 = 200 - 1 ← 10^0 (余りは何回10で割れましたか?)
200 / 10 = 20 - 0 ← 10^1
20 / 10 = 2 - 0 ← 10^2
2 / 10 = 0 - 2 ← 10^3
結果を見てもらえばわかると思いますが、整数部と同じ値になっています。。
2001 = 2*(10^3) + 0*(10^2) + 0*(10^1) + 1*(10^0)
因数分解を知っている方は10で分解していったんだなぁ〜と考えて下さい。。
小数部には10倍していきます。
積 整数部
0.08 * 10 = 0.8 - 0 ← 10^-1 (何回10を積算して整数にしましたか?)
0.8 * 10 = 8 - 8 ← 10^-2
上記の結果をまとめると
2001.08 <10>
= (10^3)*2 + (10^2)*0 + (10^1)*0 + (10^0)*1 + (10^-1)*0 + (10^-2)*8 <10>
= 2001.08 <10>
となるわけです。。わかりますか?
10進数と同様に2進数16進数も処理します。。
<例>
10進数から2進数への変換です。
5.25 <10>
= 5 + 0.25 <10>
5 / 2 = 2 - 1 ← 2^0
2 / 2 = 1 - 0 ← 2^1
1 / 2 = 0 - 1 ← 2^2
0.25 * 2 = 0.5 - 0 ← 2^-1
0.5 * 2 = 1 - 1 ← 2^-2
= (2^2)*1 + (2^1)*0 + (2^0)*1 + (2^-1)*0 + (2^-2)*1 <10>
= 101.01 <2>
10進数から16進数への変換です。
4127.0625 <10>
= 4127 + 0.0625
4127 / 16 = 257 - 15 ← 16^0
257 / 16 = 16 - 1 ← 16^1
16 / 16 = 1 - 0 ← 16^2
1 / 16 = 0 - 1 ← 16^3
0.0625*16 = 1 - 1 ← 16^-1
= (16^3)*1 + (16^2)*0 + (16^1)*1 + (16^0)*15 + (16^-1)*1
15 = F
= 101F.1 <16>
となります。
慣れてしまえば意外に楽に行える計算ですが、
それでも簡単な計算が何回も発生するのでミスらないように注意が必要です。。
解き方がわかっているのに途中で間違えたのでは何にもなりませんからね。。
んではんでは、上記を理解されたら次の段階にステップアップです。
Step.2 10進数への変換!!
まずは、10進数から・・・と行きたいところですが、
Step.1をよく見て下さい。法則が在る事に気が付かれる事でしょう。。
どんな法則があるのかわかりますよね。
乗数がきれいに並んでいる事がわかると思います。。(下記のように)
(10^3)*2 + (10^2)*0 + (10^1)*0 + (10^0)*1 + (10^-1)*0 + (10^-2)*8 <10>
3乗 > 2乗 > 1乗 > 0乗 > −1乗 > −2乗
↑
小数点位置
そうです。。小数点位置を基準に左方向へ0、1、2・・・乗
右方向へ−1、−2・・・乗と並んでいるのです。
つまり10進数なら10を基準に上記の法則に従い○乗計算しているのです。。
2進数16進数も同様の考え方でおこないます。。
<例>
101.01 <2>(読み:一・零・一・点・零・一)
= (2^2)*1 + (2^1)*0 + (2^0)*1 + (2^-1)*0 + (2^-2)*1 <10>
= 5.25 <10>
101F.1 <16> (読み:一・零・一・エフ(十五)・点・一)
= (16^3)*1 + (16^2)*0 + (16^1)*1 + (16^0)*15 + (16^-1)*1 <10>
= 4127.0625 <10>
<豆知識>
10進数で使用する数字は 0・1・2・3・4・5・6・7・8・9
2進数で使用する数字は 0・1
16進数で使用する数字は 0・1・2・3・4・5・6・7・8・9・A・B・C・D・E・F
11進数以上では0〜9以外にアルファベットも数字として使用します。。
理解頂けたら本日の最終ステップに突入です。
ここまでは10進数を中心に行ってきましたが、
最終ステップでは2進数と16進数の意外な関係?について説明していきます。。
ほとんどの方はそんなの知ってるよ!って思われるかも知れませんが、
実はこいつが一番重要なんですよね。絶対に抑えて置きたいポイントです。。
それでは早速はじめましょう。。
<例>
1111111011011100101110101001100001110110010101000011001000010000 <2>
・・・
キーン・コーン・カーン・コーン・・・
おっ!チャイムが鳴りましたね。
今日はこの辺で終わりにします。
最後に書いた2進数を16進数に直すのは宿題にしますね。
がんばって解答して下さい。。
それでは次回またお会いしましょう。。
更新日時: 2001/10/17
|