基数変換 preview

基数変換

2進法、8進法、10進法、16進法の間で数値を変換します。

Guide

N 進法変換とは、ある位置記数法で値を別の基数で表現する処理です。計算機科学と数学で最も一般的な4つの基数は、2進法(基数2)、8進法(基数8)、10進法(基数10)、16進法(基数16)です。すべてのプログラマ、電子エンジニア、計算機科学の学生がこれらの体系に日常的に出会います。本ガイドでは、各基数の仕組み、相互の変換方法、各基数が適切な選択となる実用的状況を説明します。 10進法は日常で使う体系です。0〜9の10個の数字を持ちます。10進数の各桁は10の累乗を表します。数5207は5×1000、2×100、0×10、7×1を意味します。この桁の値の概念はすべての基数に適用されます。変わるのは利用可能な数字の数と各桁が表す累乗だけです。10進法が発展したのは、人間に指が10本あり、10が自然なまとまりだからとほぼ確実に言えます。 2進法は0と1の2つの数字を使います。各桁は2の累乗を表します。2進数1101は1×8、1×4、0×2、1×1を意味し、10進数で13に等しくなります。電子回路がオンとオフ、高電圧と低電圧の2つの安定状態を持つため、計算機は2進法で動作します。テキストから動画、ソフトウェアの命令まで、計算機が処理するあらゆるデータは最終的に1と0の並びとして表現されます。 2進数はすぐに長くなります。10進数255は2進数で11111111と、10進法なら3桁のものが8桁になります。そのためプログラマは大きな値を生の2進数で書くことはまれです。8と16はともに2の累乗であるため、2進数にきれいに対応する略記法として8進法や16進法を使います。 8進法は0〜7の8個の数字を使います。8進数の1桁はちょうど2進数3桁に対応します。8進数17は2進数001 111に等しく、10進数では15です。8進法は、12ビット、24ビット、36ビットマシンのように、語長が3で割り切れるアーキテクチャを使っていた時代の計算機で歴史的に重要でした。今日、8進法は Unix/Linux のファイルパーミッションで最もよく現れます。パーミッション値755は、所有者が読み・書き・実行可能(7 = 2進数111)、グループとその他は読み・実行はできるが書きは不可(5 = 2進数101)を意味します。Linux と macOS の chmod コマンドはファイルパーミッションの設定に8進数を使うため、Unix 系システムで作業するシステム管理者や開発者にとって8進法の知識は関連があります。 16進法は0〜9と A〜Fの16個の数字を使い、Aは10、Bは11、Cは12、Dは13、Eは14、Fは15を表します。16進数の1桁はちょうど2進数4桁に対応します。このため現代の計算機では16進法が2進データの略記法として好まれます。16進数FFは2進数1111 1111、10進数で255に等しくなります。1バイト(8ビット)は常にちょうど2桁の16進数で表せるため、メモリ内容、カラー値、MAC アドレス、暗号ハッシュの表示に16進法は理想的です。 10進法から他の基数への変換には反復除算を使います。10進数200を2進法に変換するには、200を2で繰り返し割り、余りを記録します。200÷2 = 100 余り0。100÷2 = 50 余り0。50÷2 = 25 余り0。25÷2 = 12 余り1。12÷2 = 6 余り0。6÷2 = 3 余り0。3÷2 = 1 余り1。1÷2 = 0 余り1。余りを下から上に読むと11001000です。同じ方法が任意の目的の基数で機能します。200を16進法にするには16で割ります:200÷16 = 12 余り8、12÷16 = 0 余り12(C)。下から上に読むとC8です。 任意の基数から10進法への変換には桁値の公式を使います。各桁にその桁の累乗を掛けて合計します。16進数2F3について:2×256(16の2乗) + 15×16(Fは15) + 3×1 = 512 + 240 + 3 = 755(10進数)です。この方法は任意の元の基数で機能します。2進数101010について:1×32 + 0×16 + 1×8 + 0×4 + 1×2 + 0×1 = 42(10進数)です。 2進法と16進法の変換は、16進数1桁がちょうど2進数4桁であるため簡単です。2進数を右から4桁ずつの塊に分けます。必要なら先頭にゼロを補います。2進数10110111は1011 0111となり、16進数でB7です。逆方向には、各16進数字を4ビットの2進数に置き換えます。16進数A3は1010 0011になります。この直接対応が、プログラミングで16進法が人気な理由です。 2進法と8進法の変換も3桁のグループで同じ原理に従います。2進数10110111は010 110 111(先頭ゼロで補完)となり、8進数267です。8進数52は2進数101 010です。3ビットのグルーピングにより、8ビット単位の現代アーキテクチャでは8進法は16進法より便利でなく、ほとんどのプログラミング場面で16進法が8進法に取って代わりました。 8進法と16進法の変換には直接の近道はありません。標準的なアプローチは、中間ステップとして2進法を経由することです。8進数を2進数に変換し(各8進数字を3ビットに)、2進数の桁を4ビットの塊に再グループ化して16進法に変換します。例えば8進数375は2進数011 111 101、0 1111 1101に再グループ化され、16進数FDです。2進法を経由すると1ステップ増えますが、処理は完全に機械的で、練習すれば素早くできます。 異なる基数の小数も同じ位置の論理に従いますが、負の累乗を使います。10進法で0.75は7×0.1 + 5×0.01を意味します。2進法で0.11は1×0.5 + 1×0.25を意味し、10進数で0.75に等しくなります。すべての10進小数が有限の2進小数に変換されるわけではありません。10進数0.1の2進法は0.0001100110011…と無限に繰り返します。これが計算機での浮動小数点精度問題の根本原因です。 プログラミング言語はソースコードで基数を区別するために接頭辞を使います。C、Java、JavaScript、Python など多くの言語で、0b または 0B は2進法(0b1101)、0o または 0O は8進法(0o17)、0x または 0X は16進法(0xFF)を示します。接頭辞のない数は10進法です。一部の古い C コードは8進法に先頭ゼロを使い(017)、10進数の10を意図して010と書くと8進数の8になるというよくあるバグの源になります。JavaScript の strict モードと現代版は8進法に明示的な 0o 接頭辞を要求することでこれに対処します。 Web 開発のカラーコードは16進法を広く使います。CSS カラー #3A7BFF は、赤チャネルが3A(10進数58)、緑が7B(123)、青がFF(255)に分解されます。16進法を理解すればカラーコードを直接読み調整できます。少し暗めの青が必要?FFをE0に変えましょう。RGB 値128、64、32を16進法に変換したい?各要素を変換します:128は80、64は40、32は20、#804020になります。CSS は各チャネル1桁の略記16進カラーもサポートします:#F00 は #FF0000(純赤)に展開されます。8桁の16進カラー(#3A7BFFCC)のアルファチャネルは同じ16進表現で透明度を加えます。 メモリアドレスとデバッグは16進法を標準的な表現として使います。0x7FFF5FBFF8A0 のようなメモリアドレスを見たとき、それは12桁の16進数で表現された48ビットの値です。デバッガ、16進エディタ、メモリダンプユーティリティはすべてデータを16進法で表示します。コンパクトで2進法に直接対応し、バイト境界にきれいに揃うためです。16進数の2桁のペアが1バイトで、バイトを数え境界を特定しやすいです。16進ダンプは1行に16バイトを表示し、各バイトは2桁の16進数で、ASCII 文字表現と並んで示されます。この形式はバイナリファイル、ネットワークパケット、生のディスクデータを検査する標準的な方法です。 ネットワークは MAC アドレス(48ビット、A4:C3:F0:12:34:56 のように6ペアで表示)と IPv6 アドレス(128ビット、2001:0db8:85a3:0000:0000:8a2e:0370:7334 のように4桁の16進数8グループで表示)に16進法を頼ります。16進法の理解はネットワーク設定とトラブルシューティングに不可欠です。CIDR 表記で表されるサブネットマスクは、どのビットがネットワークを識別し、どのビットがホストを識別するかを示す2進表現に直接対応します。 暗号ハッシュは固定長の16進文字列を生成します。MD5 ハッシュは32桁の16進数(128ビット)です。SHA-256 ハッシュは64桁の16進数(256ビット)です。公開値とハッシュを比較してファイルダウンロードを検証するとき、あなたは16進数を読んでいます。各文字がハッシュ出力の4ビットを表します。ハッシュ値が10進法ではなく16進法で表示されるのは、16進法の方がコンパクトでハッシュアルゴリズムの2進出力に直接対応するためです。 プログラミングのビット演算は2進レベルで動作しますが、読みやすさのために16進法で表現されることがよくあります。0xFF00 のようなビットマスクは、10進法の同等値65280や2進法の1111111100000000より明確でコンパクトです。ビット単位の AND、OR、XOR、シフト演算は低レベルプログラミング、デバイスドライバ開発、プロトコル実装、性能最適化の基礎です。2進表現の理解はこれらの演算を効果的に使うための前提です。左に1ビットシフトすると値が倍になります。右に1ビットシフトすると(符号なし整数では)半分になります。マスクで AND は特定ビットを取り出します。マスクで OR は特定ビットを設定します。XOR は特定ビットを反転させます。 ASCII と Unicode の文字エンコーディングは、文字を16進法でよく表示される数値コードに対応させます。文字 A は 0x41(10進数65)です。空白は 0x20(10進数32)です。URL エンコードは16進法を使います:%20 は空白、%3A はコロンを表します。これらの16進値を理解すれば、エンコーディング問題のデバッグ、バイナリプロトコルの解析、生データストリームの操作に役立ちます。UTF-8 エンコーディングは可変長のバイトシーケンス(1〜4バイト)を使い、先頭ビットの2進パターンがバイト数を示すため、バイトレベルのテキストエンコーディングを理解するには2進法の理解が不可欠です。 2進法の符号付き整数は、2の補数と呼ばれる表現を使います。8ビットの2の補数システムでは、値は -128〜127の範囲になります。最上位ビットが符号ビットで、0が正、1が負です。-1は8ビット2進数で11111111(16進数0xFF)として表されます。-128は10000000(0x80)です。2の補数で数を符号反転するには、すべてのビットを反転して1を加えます。例えば5の8ビット2進数は00000101です。反転すると11111010です。1を加えると11111011で、-5を表します。2の補数は事実上すべての現代プロセッサで符号付き整数の標準です。これを理解すれば、符号付き演算のデバッグ、メモリダンプの読み取り、バイナリプロトコルの操作での混乱を防げます。 浮動小数点数にも IEEE 754 規格で定義された2進表現があります。32ビット単精度は1つの符号ビット、8つの指数ビット、23の仮数ビットを持ちます。64ビット倍精度は1つの符号ビット、11の指数ビット、52の仮数ビットを持ちます。これが浮動小数点演算が驚くべき結果を生みうる理由です。10進数0.1は2進浮動小数点で正確に表せません。それは10進法で1/3が正確に表せないのと同じです。JavaScript で 0.1 + 0.2 が 0.30000000000000004 になるのは、2進表現の限界が原因です。特殊値には正と負の無限大、負のゼロ、NaN(非数)があり、それぞれに固有のビットパターンがあります。 Base64 エンコーディングは計算機で広く使われるもう一つの記数法で、特にバイナリデータを印字可能な ASCII テキストとしてエンコードするために使われます。Base64 は64文字(A-Z、a-z、0-9、+、/)を使って6ビットのデータグループを表します。メール添付(MIME エンコーディング)、HTML と CSS のデータ URI、JWT トークン、API 認証ヘッダーに現れます。3バイトのバイナリデータが4つの Base64 文字になり、約33%のサイズ増加をもたらします。Base64 は暗号化ではありません。データ転送の互換性のために使われる可逆なエンコーディングです。 2進化10進法(BCD)は、各10進数字を4ビットの2進等価で表すが、数字を単一の2進数には合成しないハイブリッドシステムです。10進数42の BCD は0100 0010で、42の純2進表現(101010)とは異なります。BCD は財務計算、デジタル時計、10進精度が重要で2進浮動小数点の丸め誤差が許されないその他の応用で使われます。一部のプロセッサは BCD 演算命令を含みます。 N 進法変換はデータ圧縮、誤り検出符号、ディジタルエレクトロニクスに応用があります。圧縮アルゴリズムは2進データを直接扱います。CRC(巡回冗長検査)とチェックサム計算は2進表現で動作します。ディジタル回路設計は2進論理ゲートと真理値表を使います。10進法、2進法、16進法、8進法の間を流暢に行き来できる能力は、これらすべての分野での中核スキルです。 よくある変換ミスには、桁の値の数え間違い(桁が1乗ではなく0乗から始まるのを忘れる)、コードでの8進と16進の接頭辞の混同、16進バイトの先頭ゼロの欠落(バイト値に 0A ではなく A と書く)、2の補数規則の誤適用があります。もう一つの頻出エラーは間違った基数で演算を行うことで、0x10 を加えて10を期待するが結果は実際には10進数で16、といった具合です。WebRecast の N 進法変換ツールは変換を即座に処理し4つの基数すべてで結果を同時に表示するため、これらのエラーを排除します。 手動練習には、16進値0〜Fとその4ビット2進等価を暗記しましょう。ひとたび16進数字1桁を考えずに2進法に変換できれば、より大きな変換はその知識を桁ごとに適用するだけになります。16進の0は0000、1は0001、2は0010、3は0011、4は0100、5は0101、6は0110、7は0111、8は1000、9は1001、Aは1010、Bは1011、Cは1100、Dは1101、Eは1110、Fは1111です。この16項目の参照表は、低レベルのデータを扱うプログラマが暗記できる最も有用なものです。 2の累乗は少なくとも 2^16(65536)までは暗記する価値があります。数列は:1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768、65536。これらの値はプログラミングの場面で絶えず現れます。1024バイトが1キロバイト(厳密には1キビバイト)です。65535(2^16 - 1)は16ビット符号なし整数の最大値です。2147483647(2^31 - 1)は32ビット符号付き整数の最大値です。これらの数字を即座に認識すれば、背後にある2進構造が分かります。 計算機のデータサイズは2の累乗を使い、バイトで表されます。1バイトは8ビットです。1キロバイトは1024バイト(2^10)です。1メガバイトは1,048,576バイト(2^20)です。1ギガバイトは1,073,741,824バイト(2^30)です。記憶装置メーカーはしばしば10の累乗を使い(1 GB = 1,000,000,000 バイト)、そのため1 TB ドライブが OS 上では約931 GiBと表示されます。この曖昧さを解消するため IEC 接頭辞(kibi、mebi、gibi)が導入されましたが、業界では依然両方の慣習が使われます。データサイズの2進法に基づく理由を理解すれば、これらの数字が計算機の至る所に現れる理由が説明できます。 誤り検出と訂正符号は2進演算を広く使います。パリティビットはデータワードに1ビットを加え、1ビットの総数を偶数(偶数パリティ)または奇数(奇数パリティ)にします。ハミング符号は2の累乗の位置(1、2、4、8、16)に複数のパリティビットを使って単一ビット誤りを検出・訂正します。CRC 符号は2進多項式除算(加算が XOR である GF(2) 演算)を使ってチェックサムを生成します。これらの技法は信頼性の高いデータ蓄積と転送の基礎です。 ブール代数、ディジタル論理の背後にある数学は、2進法で動作します。AND、OR、NOT、XOR、NAND、NAND ゲートは2入力を取り2出力を生成します。真理値表はすべての可能な入力の組合せとその出力を列挙します。カルノー図とブール簡約は複雑な式を最小のゲート実装に還元します。簡単な計算機から現代の CPU まで、すべてのディジタル回路はこれらの2進論理ゲートから構築されます。2進法を理解することは、ハードウェアが最も低いレベルでどう動くかを理解する入り口です。 命令セットと機械語は CPU が直接実行する2進シーケンスです。MOV EAX, 5 のような x86 命令は2進バイトとしてエンコードされます。アセンブリ言語はこれらの2進命令に人間が読めるニーモニックを提供します。C、Java、その他の言語でコードをコンパイルすると、コンパイラは最終的に2進機械命令を生成します。コンパイル済みコードを16進エディタで見ると、プロセッサが実行する生の2進(16進バイトとして表示)が明らかになります。 量子計算は、0と1の重ね合わせとして存在できる量子ビットを持つ異なるパラダイムを導入します。古典2進計算は確定したビットを使います。量子計算は確率振幅を使います。しかし、量子計算の出力は古典的な2進ビットとして測定されます。量子と古典の計算間のインターフェースは依然として伝統的な基数を使い、量子アルゴリズムは従来の2進数学を使って設計・分析されます。 WebRecast の N 進法変換ツールは4つの基数のいずれかで入力を受け付け、他のすべてで同等の値を出力します。10進数を入力すれば2進、8進、16進表現が表示されます。16進カラーコードを貼り付ければ2進形が見えます。データシートの2進文字列を入力すれば10進数値が得られます。変換は入力に応じてリアルタイムで行われ、基数間で値がどう関係するかを素早く探求できます。異なる記数法の間を素早く正確に行き来する必要があるときはいつでも、コードエディタ、デバッガ、データ分析ツールと併せてお使いください。

関連ガイド

関連する WebRecast セクション