2進数と基数変換の方法を解説
皆さんは「コンピュータは0と1で動いている。」という話を聞いた事があるでしょうか?
今現在、私達の暮らしにはコンピュータやネットワークが密接に関わっており、日常生活でのオンラインショッピングや調べ物、仕事での事務作業など、様々な事にコンピュータを使用しています。
このように様々な事が可能でとても便利な存在なので、コンピュータがどのような仕組みで動いているのかが気になる方も多いと思いますが、実際は0と1(電流が流れているか、流れていないか)の二種類しか使用していないのです。
(厳密に言えば電圧なども関係していますが…)
なので今回は、その基礎中の基礎である「2進数と基数変換」について解説したいと思います。
目次
2進数とは
そもそも2進数とは何かと疑問に思った方もいると思うので、簡単に2進数の説明をしていこうと思います。
私達の普段の生活で使用されている数字は「0~9」までの数字で構成されており、「9」から1つ増えると「10」となり、桁が一つ繰り上がります。
この、「何個目の数字になったら繰り上がるのか」というのを表した物が~進数という物で、私達の生活になじみ深い「10」になったら繰り上がる物を10進数と言い、コンピュータ内で使用されているのは「2」になったら繰り上がる2進数です。
2進数の数え方
2進数は0と1のみ構成されているので、2進数の仕組みを知らない人が見ると戸惑うかもしれませんが、その2進数の仕組みさえ分かってしまえば簡単です。
例えば、10進数で3の位に1という正数が入っているとしたら、「10×10×1が1個存在している」という事になるので、答えが100になるのが分かると思います。
2進数の場合でもそれは同じで、例えば3の位に1が入っているとしたら、「2×2×1が1つ存在している」という事になるので答えは4になります。
なので、2進数の数字を10進数で数える場合は、「2^(桁数-1)×桁内の整数」で各桁の数値を出し、それらの答えを合計する事で求める事が出来ます。
2進数の小数点以下の場合
2進数で整数の場合は「2^(桁数-1)×桁内の整数」で求める事が出来るのですが、小数点の場合も同じ方法で求める事が可能です。
例えば10進数で0.01という数の場合は、「1÷10÷10×1」という式に置き換える事が出来ると思います。
2進数の場合も同じで、0.01という2進数の数を求める場合は「1÷2÷2×1」なので、0.25になります。
整数の場合はその桁の数-1の分だけ掛けていましたが、小数の場合は逆に割って求める事になるので注意して下さい。
2進数以外の基数
~進数というのは「何個目の数字になったら繰り上がるのか」を表しているので、やろうと思えば3進数や21進数など、様々な進数で数を表す事が可能です。
ですが、その中でも特に使用されているのが、2進数と互換性を持つ「8進数」と「16進数」で、それぞれ2進数の状態から簡単に変換する事が出来ます。
ちなみに、16進数は16になったら桁が繰り上がるのですが、一桁目で「10」や「11」などの数字を使う訳にもいかないので、「A(10)」「B(11)」「C(12)」という風にして数字を表していきます。なので、10進数の27という数字を表す場合は「1B」という書き方です。
それぞれの進数と10進数の対応
イメージしやすい様に、それぞれの進数の値と10進数の値を対応させてみようと思います。
【2進数】
10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | … |
2進数 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | … |
【8進数】
10進数 | 0 | 1 | ~ | 6 | 7 | 8 | 9 | 10 | … |
8進数 | 0 | 1 | ~ | 6 | 7 | 10 | 11 | 12 | … |
【16進数】
10進数 | 0 | 1 | ~ | 8 | 9 | 10 | 11 | 12 | ⇒ |
16進数 | 0 | 1 | ~ | 8 | 9 | A | B | C | ⇒ |
⇒ | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | … |
⇒ | D | E | F | 10 | 11 | 12 | 13 | 14 | … |
コンピュータの中では2進数が使用されているのですが、それではすぐに桁数が多くなってしまい分かりにくくなってしまう為、人間が理解しやすい表現として2進数と互換性のある8進数や16進数が使用される事があります。
基数変換とは
基数変換とは、2進数の数値を8進数に変えたり、16進数の数値を10進数に変えたりして、文字通り基数を違う物に変換する事を言います。
通常基数変換をする場合、その数に掛けたり割ったりして求めていくのですが、2進数と8進数や2進数と16進数の様に、元々の基数(2)とべき乗の関係(‘2’^3=’8’)(‘2’^4=’16’)にあたる基数に変換する際には簡単に求める事が可能です。
基数変換の具体的な方法
一般的な基数変換の方法は、整数と小数点以下の場合で求め方が異なります。
まず整数の場合は、元の値から基数で割って余りを出していき、答えが0になったら余りの数値を下から準に書く事で求められます。
次に小数の場合ですが、整数の時とは逆に、元の小数の値から基数を掛けて整数を抜き出していき、答えが全て整数になったら抜き出した整数の値を上から準に書いていく事で求める事が可能です。
この時、整数の場合は出てきた余りを上から書いていきましたが、小数の場合は上から準に書いていくので間違わない様に注意して下さい。
べき乗の関係にある進数の基数変換
通常の場合とは異なり、べき乗の関係にある数同士の基数変換ならば基数変換を簡単に行う事が出来ます。
例えば、2進数と8進数の場合だと、8は2の3乗なので2進数の値から3個ずつに分けていき、それぞれの数を求める事で8進数にする事が可能です。
ちなみにこの逆の方法も可能で、8進数から2進数への変換の場合は、それぞれの桁の数を3桁の2進数にする事で求められます。
とりあえず数をこなして慣れよう
2進数の基数変換などは頻繁に使用する事になると思うので、早い段階から問題数をこなして慣れる様にしておきましよう。
慣れない内は間違いが多くなると思いますが、決して難易度の高い事をしている訳ではないので、早い段階から慣れる様にしておくと、これから情報系の分野を学ぶ人にとっては大きなアドバンテージになると思います。
インターネット上には様々な基数変換の問題が転がっていますし、書店で基本情報技術者関連の本もあると思うので、気になった方は見てみて下さい。
最後に
今回は2進数と基数変換について書いてみました。
参考になれば幸いです。
- 内臓GPUの性能が良いミニPCをコスパ順でまとめてみた
- TypeScriptで非推奨になっている機能一覧
- TypeScriptのexport defaultが非推奨となっていた件
- TypeScriptのNamespaceが非推奨となっていた件
- TypeScriptのthis.constructorが非推奨となっていた件
- TypeScriptのコンストラクタ引数でのpublic/privateが非推奨となっていた件
- TypeScriptのvarキーワードが非推奨となっていた件
- TypeScriptのFunction型が非推奨となっていた件
- TypeScriptのString, Number, Boolean型が非推奨となっていた件
- TypeScriptのanyが非推奨となっていた件
- TypeScriptのenumが非推奨となっていた件
- 内蔵GPUのメモリ割り当てを増やす方法【2024年版】
- ウォーターフォールは間違っている!私がアジャイル開発をエンジニアに勧める理由
- IT業界の酷い下請け構造は誰のせいなのか
- IT業界の下請け構造が酷すぎる!!
- クラウディアと他のクラウドソーシングサービスの比較
- Zigプログラミング言語とは?RustやC++との違いを解説
- めっちゃ早いPython?Nimというプログラミング言語について
- Rubyの静的型付け版?Crystalってどんな言語なのか解説
- Elixirは開発しづらい?Gleamへ移行しよう – 開発体験が劇的に改善
- Gleamの基本的な構文とデータ型
- Gleamの環境構築方法[Linux]
- Gleam言語でのWebアプリ開発ロードマップ
- MacBook Pro M1の外部ディスプレイちらつき現象について
- MacBook Air M2で4K60Hz外部ディスプレイを使用する方法
- Ryzen 7040HS Phoenix搭載LinuxマシンのGPUドライバー設定ガイド
- 注目を集める新星Gleam言語!Elixirとの違いから見る特徴と可能性
- DellとHP、買うならどっちがマシ?徹底比較ガイド
- サブドメインのメリット・デメリットを徹底解説!
- 中古ドメインって実際どうなの?メリット・デメリットを解説
- ノートパソコン バッテリー持ち ランキング【2024年4月】徹底比較!
- なぜ安い?workドメインが安価な理由を徹底解説!
- メキシコペソ投資ってどうなの?過去データで見る特徴とリスク
- なぜ私がトルコリラ投資をおすすめしないのか – データで見る実態と注意点
- 【2024年4月最新】世界の通貨別金利ランキング!今一番利回りが高い通貨はコレだ!
- 金利5%台!?米ドル保有で高金利を受け取る方法
- axumのルーティングを整理して別ファイルに分ける方法
- Acitx-webとAxumってどっちがいいの?RustのWebフレームワーク比較
- 次期C#?注目のプログラミング言語F#を徹底解説
- 電気ストーブと石油ストーブはどっちがいい?費用や特徴を徹底比較!
- ゲーミングキーボードって正直あんまり変わらないよねって話
- 【2024年版】今後はやるマイナープログラミング言語5選|現役エンジニアが解説
- Rustの現状の課題と発展途上な部分
- 私がRustがC++より優れていると感じる理由
- Rustプログラミング言語完全学習ロードマップ【2024年版】
- おすすめプログラミングスクール比較【2024年版】現役エンジニアが徹底解説
- 未経験からでもエンジニアに全然なれる件
- Model、Repository、Controller、Serviceとは?基礎から分かりやすく解説!
- Hibernateって何?
- JPAって何?