スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ちょっと情報概論1

進数表現
言うたら、機械の中で使われている2進数の考え方と、
2進数をわかりやすくした16進数の考え方です。


Javaでもよく使う(かもしれない)ので、考え方だけは必ず覚えておきましょう。

通常の生活で使われているのが10進数と言う考え方。

* 1の位が数字が10になると、10の位の数字が1つ増える。
* 10の位の数字が10になると、100の位の数が1つ増える。

元の位の数字が「10」になると、次の桁を1つ増やすので、
「10」進数といいます。

じゃあ、「2」進数はというと、
元の位の数字が「2」になると、次の桁を1つ増やします。

で、「16」進数となれば、
元の位の数字が「16」になると、次の桁を1つ増やします。


<具体例を書いてみる>

10進数を考えて見ましょう。

1の位は
「0」「1」「2」「3」「4」「5」「6」「7」「8」「9」
10個の数字から出来ております。

で、10の位はと言えば、
「0」「1」「2」「3」「4」「5」「6」「7」「8」「9」
やはり、10個の数字から出来ております。

1の位が「9」「1」を足してしまうと、「10」となります。
が、1の位では収まらなくなってしまうので

「1」が10の位、
「0」が1 の位に収納されます。

つまり、(「1」×10)+(「0」×1)となります。
※ ×10は「10の位」×1は「1の位」です。

例) 「841」を上記のように表すと、
(「8」×100)+(「4」×10)+(「1」×1)
となります。

さて、
この「100」とか「10」とかの数字を別の表記に変更してみます。

100 = 10²  
10  = 10¹  
1  = 10⁰

つまり「841」なら、
(「8」×10²)+(「4」×10¹)+(「1」×10⁰)
となります。

まとめると、
1の位は10⁰
10の位は10¹
100の位は10²
1000の位は10³
以下桁数ごとに続く・・・。


それ以外の進数表現も
この何乗という考え方をそのまま取り入れます。


<2進数の場合>

全ての桁で
「0」「1」
の2つしか使いません。

なので、
1桁だと、「0」「1」の2種類しか表現できません。

2桁になると、また「0」「1」の表現が増えて、4種類に。

1の位は2⁰
2の位は2¹
4の位は2²
8の位は2³
以下桁数ごとに続く・・・。

129.jpg

例)
「27」を2進数で表記する
「11011」
(「1」×2⁴)+(「1」×2³)+(「0」×2²)+(「1」×2¹)+(「1」×2⁰)



<16進数の場合>

考え方は一緒です。
表記は「0」~「9」「A」~「F」までです。
※「10」~「15」は桁数が溢れてしまうので、「A」~「F」となります。

例)「72」を16進数で表記する

「48」
(「4」×16¹)+(「8」×16⁰)


<まとめ>

[進数表現のキモ]
「その桁の数」×「何進数~(何桁目)」+「その下の桁の数」×「何進数~(何桁目)」・・・

コレが把握できれば、何進数が来ても問題なくなります。



(おまけ:2進数vs16進数)
格納記事






【うっかり忘れてた便利なやつ】


16進数から2進数に変換すると言うのは、
結構色んなところで出てくる気がしますので載せておきます。


次の記事で書いているASCIIコードにおいて、
A」と言うアルファベットは
16進数表記で「41」と表現されます。

余談ですが、
C言語においては0x41と記述すると、
16進数の「41」である。と認識されます。


さて本題。
16進数の「41」を2進数で表すにはどうしたらいいでしょうか?

上に書いた方法を使うと、

(「4」×16¹)+(「1」×16⁰)

結果は「65」(10進数)となります。
で、2進数(8ビット)で表現すると、

0100^0001
となります。
※わかりにくいので、便宜上「^」で4桁区切りしてます。

どうやって計算したかと言うと
上でも貼っている画像を使います。
が、いちいちスクロールするのは面倒なのでコチラにも。

129.jpg
この図はちょっとでかかったな・・・

手順①:「65」の上の表と照らし合わせ、どういう構成になっているか考える。
手順②:「65」は上の表だと「64」「1」で成り立つことがわかる。
※つまり、2⁶の場所に「1」、2⁰の場所に「1」、あとは全て「0」とします。
手順③:8ビットで書くので、2⁷から2⁰の場所までを「0」と「1」で記述します。

ですので、
「0100^0001」
となります。


【さらに簡単に出来る方法】

16進数・2進数の変換を
10進数に置き換えてから実行しますた。

が、面倒ですのでより簡単に行います。

<手順>
①:16進数は「41」でした。
②:「4」と「1」に分けます。
③:それぞれを4ビットの2進数で表わしてみます。
※ 上の図で言うと、「2³~2⁰」のところです。4ビットなら、10進数で「0~15」まで表現できます。
④:「4」→「0100」・「1」→「0001」
⑤:2つをくっつけると、「0100」「0001」
Ans:「0100^0001」


<例>「72」(16進数)を2進数と10進数に変換する。

①:まず、2進数へするので、「7」「2」を4ビットずつの2進数へ。
②:「0111」(7), 「0010」(2)
③: 0111^0010 (2進数)

④:10進数へは2進数(の表)を使って考えると、
⑤:「64」×1 + 「32」×1 + 「16」×1 + 「2」×1
⑥:「114」(10進数)

2進数がらみのときは、基本的に上の表を使うと楽です。

と言うか、参考書とかに載ってる方法は異常に遠回りです。
・・・罠?



【16進数vs2進数のまとめ】


A:16進数から2進数の場合

1:1桁ずつ区切る。
2:1桁を4ビットの2進数で表現する。
3:それぞれの4ビットで表現された2進数を順番につなげる。

B:2進数から16進数の場合(逆パターン)

1:4桁ずつに区切る。
2:4桁に区切った2進数を10進数表記にする。
3:それぞれの10進数表記をじゅんばんにつなげる。


【最後に】

8進数の場合

上の手順を3ビット単位にするだけ。
0~7まで表現(8パターン)できるので、8進数が表現できる。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

koukou263

Author:koukou263
ニコニコに動画をうpしてた人
【ニコニコ動画】自作ニコ割
【ニコニコ動画】iM@Sうpリスト

最新記事
最新コメント
カテゴリ
月別アーカイブ
リンク
最新トラックバック
検索フォーム
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。