ホームページ >バックエンド開発 >PHPチュートリアル >PHPの2進数、8進数、10進数、16進数の変換
PHP の 2 進数、8 進数、10 進数、および 16 進数の変換
2 進数、8 進数、10 進数、および 16 進数の変換方法: 2 で割って余りを取り、逆順に並べます。つまり、毎回整数部分を 2 で割って、余りをビット重みの数値にします。商は引き続き 2 で除算され、余りは前の位置の数値になります。このステップは商が 0 になるまで続きます。最後の読み取り値が取得されると、...
(1) 10進数を2進数に変換し、整数部と小数部に分けます
①整数部
方法: 2で割って余りを取り、逆順に並べます。つまり、毎回整数部分を2で割ります。余りはポジションウェイトの数値であり、商は引き続き2で割られ、余りはが前の位置のウェイトの数値である場合、このステップは商が 0 になるまで継続します。最後の数値を読み取る場合は、最後の余りから最初の余りまでを読み取ります。以下の例:
例: 10 進数の 168 を 2 進数
に変換します
結果を取得します 10 進数の 168 を 2 進数 (10101000) に変換します
最初のステップは 168 を 2 で割ることで、商は 84、余りは 0 になります。
2 番目のステップでは、商 84 を 2 で割ります。商 42 の余りは 0 になります。
3 番目のステップでは、商 42 を 2 で割ります。商 21 の余りは 0 になります。
4 番目のステップでは、商 21 を 2 で割り、商 10 の余りは 1 になります。
5 番目のステップでは、商 10 を 2 で割り、商 5 の余りは 0 になります。
ステップ 6: 商 5 を 2 で割ると、商 2 の余りは 1 になります。
ステップ 7: 商 2 を 2 で割ると、商 1 の余りは 0 になります。
ステップ 8: 商 1 を 2 で割ると、商 0 の余りは 1 になります。
ステップ9、読み取り。最後の桁は2で割った後に得られるため、最後の余りから順に数値を読み取ります。つまり、10101000
。
(2) 小数部
方法: 2 を掛けて整数に丸め、順番に並べます。つまり、小数部を 2 倍し、次に整数部を取り、残りの小数部を引き続き 2 倍し、次に整数部を取り、そして残りの小数部に 2 を加え、小数部
まで
それがゼロになるまで。決してゼロになれない場合は、小数点以下の桁数を必要なだけ保持する場合、次の桁が 0 か 1 かに基づいて数値を四捨五入するのと同じです。ゼロの場合は四捨五入します。オフ 1 の場合は 1 桁追加します。つまり、0 は 1 に丸められます。読み取り値は前の整数から次の整数までである必要があります。次に例を示します。
例 1: 0.125 をバイナリ
に変換します
結果は次のようになります: 0.125 をバイナリ (0.001) 2
に変換します。
分析: 最初のステップでは、0.125 に 2 を乗算して 0.25 を取得し、整数部分は 0、小数部分は 0.25 になります。
2 番目のステップでは、小数部分 0.25 に 2 を乗算して 0.5 を取得し、整数部分は 0、小数部分は 0.5 になります。
3 番目のステップでは、小数部分 0.5 に 2 を乗算して 1.0 を取得し、整数部分は 1、小数部分は 0.0 になります。
4 番目のステップでは、最初の桁から始めて最後の桁 (0.001) まで読み取ります。
例 2、0.45 を 2 進数に変換します (小数点第 4 位まで保持)
上記の手順からわかるように、5 回目の乗算を実行すると、結果は 0.4 になり、その後小数部分に 2 を乗算して 0.8 を取得し、0.8 に再度 2 を乗算して、乗算が次の値になるまで続きます。 1.6. 結局、小数部分はゼロなので、この時点で四捨五入する方法を学ぶ必要がありますが、2進数には0と1の2つの数値しかないため、0から1への四捨五入が発生します。 。これも変換時のコンピュータエラーが原因ですが、予約桁が多く精度も非常に高いため、無視しても問題ありません。
したがって、0.45 を 2 進数に変換すると、0.0111
にほぼ等しいと結論付けることができます。
上記で紹介した方法は10進数を2進数に変換する方法ですが、注意が必要なのは
です。
1) 10 進数を 2 進数に変換するには、整数部分と小数部分に分割し、別々に変換する必要があります
2) 整数の変換の場合は2で割る剰余法が使用され、小数の変換の場合は2倍の方法が使用されます
3) 読む方向に注意してください
したがって、上記の方法から、10 進数 168.125 を 2 進数に変換すると 10101000.001、または 10 進数を 2 進数に変換すると 10101000.0111 にほぼ等しいと結論付けることができます。
(3) 整数部と小数部に分けずに2進数を10進数に変換します
方法: 重み付け加算法に従って、つまり、2 進数に重みを乗算し、その合計を 10 進数に加算します。例
2 進数 101.101 を 10 進数に変換します。
結果は次のようになります: (101.101)2=(5.625)10
2 進数を 10 進数に変換するときに誰もが注意する必要があるのは
です。
1) バイナリの各ビットの重みを知る
2) 各ビットの値を見つけられるようにする
まず、数学的な関係を理解する必要があります。つまり、23=8、24=16、8 進数と 16 進数はこれに基づいています。
この関係から派生します。つまり、8 進数を表すには 3 つの 2 進数が使用され、16 進数を表すには 4 つの 2 進数が使用されます。
次に、8、4、2、1 の 4 つの数字を覚えてください (23=8、22=4、21=2、20=1)。次に、2 進数と 8 進数間の変換を練習してみましょう。
(1) 2進数を8進数に変換
方法:三位一体法、つまり二進法の小数点を分割点として左(右)の 3 桁ごとに 1 桁として、これら 3 つの 2 進数を加算する方法を採用します。重さに応じた桁数が得られ、得られる数値は 1 桁、8 桁の 2 進法になります。数値は順番に並べられ、小数点の位置は変更されず、得られる数値が調べている 8 進数になります。のために。左(右)に3桁取って最上位(最下位)の桁までたどり着くと、3桁を構成できない場合は、小数点の一番左(右端)、つまり最上位に0を追加できます。整数の(最下位)桁を3人で構成します。例
①2進数101110.101を8進数に変換します
結果を取得します: 101110.101 を 8 進数に変換して 56.5
② 2進数1101.1を8進数に変換します
結果を取得します: 1101.1 を 8 進数、15.4 に変換します
(2) 8進数を2進数に変換
方法: 1 対 3 の方法を採用します。つまり、8 進数を 3 つの 2 進数に分解し、その 3 桁の 2 進数を使用して、重みに応じて 8 進数を加算します。小数点の位置は変わりません。例:
① 8 進数 67.54 を 2 進数に変換します
したがって、8 進数 67.54 を 2 進数に変換すると 110111.101100、つまり 110111.1011
上記の質問からわかるように、8 進数から 2 進数への変換を計算します
まず、8 進数を左から右に展開します。各桁は 3 桁に展開され、小数点位置は変更されません
次に、各桁を 22、21、20 (つまり 4、2、1) に拡張して数値を構成します。つまり、a×22+ b×21 +c×20= その桁の数値 (a=1 またはa =0、b=1 または b=0、c=1 または c=0)、abc を配置してそのビットの 2 進数を取得します
次に各ビットを2進数にアップコンバートして順番に並べます
最後に、8 進数から 2 進数に変換された数値を取得します。
上記の方法は 2 進数と 8 進数の交換です。 質問を行うときに注意する必要があるのは
です。
1) それらの間の交換は、2 進数から 10 進数への変換とは異なり、1 桁から 3 桁への変換です
2) 0 を足したり 0 を削除したりするときは、小数点の左端または小数点の右端 (つまり、整数の最上位桁と整数の最下位桁) の 0 を追加または削除することに注意してください。小数点)、そうでない場合はエラーが発生します
方法: 2 進数と 8 進数の間の変換に似ていますが、1 桁 (16) と 4 桁 (2 進数) の間の変換である点が異なります。これについては以下で詳しく説明します
(1) 2進数を16進数に変換
方法: 4 進 1 法を採用します。つまり、2 進小数点を分割点として開始し、左 (右) の 4 桁ごとに 1 桁にし、重みに応じてこれら 4 つの 2 進数を加算します。結果の数値は 16 桁です。その後、2 進数が順番に並べられ、小数点の位置は変更されず、結果の数値が探している 16 進数になります。左(右)に4桁取って最上位(最下位)の桁までたどり着くと、4桁が構成できない場合は、小数点の一番左(右端)、つまり最上位に0を追加できます。整数の(下位)桁は 4 人で構成されます。
①例:2進数11101001.1011を16進数に変換
結果を取得します: バイナリ 11101001.1011 を E9.B
として 16 進数に変換します。
②例:101011.101を16進数に変換
結果は次のようになります: バイナリ 101011.101 を 2B.A
として 16 進数に変換します。
(2)16進数を2進数に変換
方法: 1 行 4 列の方法を採用します。つまり、16 進数を 4 つの 2 進数に分解し、4 つの 2 進数の加重加算を使用して 16 進数を構成します。小数点の位置は変わりません。
①16進数の6E.2を2進数に変換します
したがって、結果が得られます: 16 進数の 6E.2 を 01101110.0010 としてバイナリに変換すると、110110.001
方法: 通常、相互に直接変換することはできません。通常、8 進数 (または 16 進数) を 2 進数に変換し、その後 2 進数を 16 進数 (または 8 進数) に変換します。小数点の位置は変わりません。対応する変換については、上記の 2 進数から 8 進数への変換と 2 進数から 16 進数への変換を参照してください
(1) 8 進数を 10 進数に変換します
方法: 重みによる加算、つまり、8 進法の各ビットの数値にビットの重みを乗算し、その合計を 10 進数に加算します。
例: ①8進数67.35を10進数に変換する
(2) 10進数を8進数に変換
10 進数を 8 進数に変換するには 2 つの方法があります:
1) 間接法: 最初に 10 進数を 2 進数に変換し、次に 2 進数を 8 進数に変換します
2) 直接法: 前述したように、8 進数は 2 進数から派生するため、10 進数から 2 進数への変換、または整数部分の変換と小数部分の変換と同様の方法を使用できます。詳細は以下の通り:
①整数部
方法: 8 で割って余りの方法を採用します。つまり、整数部分を毎回 8 で割って、余りが重みの数値になり、商を引き続き 8 で割った余りが重みの数値になります。前の値に重みを置き、商が 0 になるまでこのステップを続けます。最後の数値を読み取るときは、最後の余りから最初の余りまで始めます。
②小数部
方法: 8 を掛けて切り上げます。つまり、小数部を 8 倍してから整数部を取り、引き続き残りの小数部を 8 倍してから整数部を取り、残りの小数部を 8 倍して、ゼロになるまで小数部分を取ります。決してゼロになれない場合、それは小数の四捨五入と同じであり、一時的に 3 丸めと名付けられます。
例: 10 進数 796.703125 を 8 進数
に変換します
解決策: まず、この数値を整数部 796 と小数部 0.703125 に分割します
整数部
小数部
したがって、結果の 10 進数 796.703125 は 8 進数 1434.55
に変換されます。
上記の方法を最初に 10 進数に変換し、次に 8 進数に変換して、結果が同じかどうかを確認できます。
16 進数と 8 進数には多くの類似点があります。上記の 8 進数と 10 進数の間の変換を参照して、これら 2 つのシステム間の変換を自分で試してみてください。
さまざまな基本システム間の上記の変換を通じて、以前の変換図を再改善することができます