二進数の変換でつまずいている人が多いようですね。
情報系や商業系の高校生もやっている内容なので頑張ってみましょう!
目次
二進数とは
コンピュータの世界は「0」と「1」で出来ている。というのは、小中学生のころでもよく見聞きした言葉だと思います。
そういえば、高校の入試の面接のとき、「コンピュータの世界は、0と1で出来ている。と聞いたことがあり、それが何かを勉強したい」みたいなことをしゃべった記憶が・・・
10進数、2進数、16進数
どういう意味・・・?
10進数は、10(じゅう)をあらわすときに、「10(いち・ぜろ)」」と表示
16進数は、16(じゅうろく)をあらわすときに、「10(いち・ぜろ)」と表示
2進数は、2(に)をあらわすときに、「10(いち・ぜろ)」と表示
1 |
※ここはとても大事なので覚えておきましょうね |
基数変換
10進数から2進数に変換する課題とかで大切な知識となります。
21を16ビット二進補数表現で…
「21という10進数の数字を、16ビット二進補数表現で書くと」
・・・16ビット:2進数(2進法)16桁のこと
・・・二進補数表現…(授業で出たかな?調べてね。)
【二進】二進数(二進法)のこと
【補数表現】マイナスの値のときに説明します。今回は、21(プラスの値)なので一旦飛ばします
①数値21を2進数(二進法)にするには・・・
数値21を2進数(二進法)にするには・・・
21を2で割っていきます。
1 2 |
★参考サイト(同じことが書いてありますが・・・)★ <a href="https://sci-pursuit.com/math/binary-number-conversion.html" target="_blank" rel="noreferrer noopener" title="https://sci-pursuit.com/math/binary-number-conversion.html">https://sci-pursuit.com/math/binary-number-conversion.html</a> |
②16ビットとは・・・
上記のことから、21を2進数で表すと、10101となります。
5桁なので5ビットということになりますので、16ビット=16桁にする必要があります。
16桁にするのは簡単で、0を頭につけてあげればよいのです。
21を16ビットの2進数で表すと・・・「0000 0000 0001 0101」となります。
※4桁ずつスペースを入れているのは、見やすくするためです。
③補数表現
補数表現とは、マイナスの値の時に実施するので、今回は特に何もしません。
④16進法(21を16進数に変換)
2進法を16進法に変換します
先ほどの…「0000 0000 0001 0101」を4桁ずつ16進数に変換してあげるよ。
16進数で表すと「0015」になるよ!
マイナスの数字はどう表すの?
2進数では、1の補数、2の補数・・・というのがあります。
※10の補数とか9の補数とかいうと意地悪になるので、ここでは飛ばします(自分は、高校の時にやりました…)。
※習ったor少し単語が出てきたはずです。講義だけで理解できる人は少ないと思いますし、自主学習していくのが大学の本来のあるべき姿なので・・・ということで、各自調べてみてくださいね。
残念ながら、高校(生徒)と大学(学生)の違いはこういうところにあるみたいですね…そんなに甘くないですね…
1の補数
例を示します
「0101 0101」という数があった場合に、「1111 1111」から「0101 0101」を引いた数が1の補数になります。
「1111 1111」 – 「0101 0101」= 「1010 1010」となります。
※裏技的には、0と1を入れ替えた数が1の補数になります。
2の補数
結論から言うと「1の補数に1を足したものが2の補数です。」
先ほどの1の補数「1010 1010」に1を足した、「1010 1011」が2の補数になります。
※どういうことかというと、元の数「0101 0101」に2の補数「1010 1011」を足すと、桁が1つ増え「1 0000 0000」となります。
見やすく書くと「0001 0000 0000」ですが、元の数に足すと桁が繰り上がる数が2の補数になります。
本題、マイナスの値を2進数で・・・
マイナスの値を表現するには、補数表現を使用します。
※今習ったことですね。
①21(マイナスじゃない値)を求めます
2進数の21=0000 0000 0001 0101
②0と1を逆にします(1の補数)
1の補数:「1111 1111 1110 1010」
③+1します(2の補数)
2の補数:「1111 1111 1110 1011」
~ということで~
★2進数の-21は、③の「1111 1111 1110 1011」となります
★16進数にするには…4つずつ、16進数に変換しましょう
「1111」・・・F
「1111」・・・F
「1110」・・・E
「1011」・・・B
★よって「-21」を「16ビット 二進 補数表現」で「16進法」を使って書くと…「FFEB」となります!
※超難しい!
図解
さいごに・・・
変換サイトがあるので、各自こちらで試してみましょう。
1 |
<a href="https://note.cman.jp/convert/bit/" target="_blank" rel="noreferrer noopener">https://note.cman.jp/convert/bit/</a> |
まとめ
- 基数変換を解説しました。
- 2進数の変換方法を解説しました。
- 1の補数、2の補数を解説しました。
- よくわからなかったら、変換サイトで合っているか確認してみてください。
2進数については、プログラミング超入門の第1回で2進数について、第2回では「浮動小数点の誤差」について、第5回では「バイナリデータ」について触れてます。そちらも是非。
Pythonでは、2進数は「0b」で始まり、8進数では「0o」、16進数では「0x」で始まります。(実践プログラミング演習Ⅰ第2回第2講より)参考までに。
Ipv4アドレスは、コンピュータ内では2進数表記で扱われます。(インターネット技術Ⅰ第4回第1講より)
初級プログラミングⅠでは、第6回第1回長桁計算で2進数から10進数への変換が出てきます。索引にどうぞ。