コンピュータはどのようにしてバイナリ、たとえば110011(51)を対応するASCII値53( '5')および49( '1')に変換しますか?さらに、コンピュータはどのようにして53と49を110011に戻しますか?
4 に答える
2進数から10進数への変換は、通常、繰り返し除算ループとして機能します。数値Nで開始する場合、(N mod 10)が最後の桁であり、次にNを10で除算し、繰り返して他の桁を取得します。
- N=51から始めます
- 51mod10は1です。最後の桁は1です。
- 10で除算して、抽出したばかりの桁を破棄し(整数除算ラウンド)、5を返します。
- (これはステップ2の繰り返しであり、Nが異なります)5mod10は5です。次の桁は5です。
- 5/10は0(四捨五入)なので、これで完了です。逆順の数字は1と5です。
- 各桁の値に48を加算して、対応する10進数をASCIIで取得します。
- したがって、最終結果は「51」になります。
文字列から内部表現への変換はさらに簡単です。
- アキュムレータの0から開始します
- 最初の文字(ここでは「5」)を取ります。これはASCII53です。48を引くと5になります。
- これをアキュムレータに追加して、0 + 5=5を取得します。
- 別の数字があることに注意してください。アキュムレータに10を掛けると、50になります。
- 手順1に戻ります
次の反復で(つまり、「1」= ASCII 49の場合)、48を再度減算します:49-48=1。アキュムレータに1を加算すると、51になります。これ以上文字がなくなるため、完了して結果は51になります。
コンピュータの内部表現がバイナリであるという事実は偶然です。コンピュータ内で文字列を数値に変換するには、加算、減算、乗算が可能である必要があります。
(もちろん、減算は負の数の加算であり、乗算は加算のシーケンスであるため、実際に必要なのは加算だけです。)
それはどちらの方向にもそれらを回しません。は53
常に53
メモリ内にあります。
何が起こるかというと、それを表示する必要があるときに、数値53
を見ると、私たちの目に見えるグラフィックを生成することを知っている関数が呼び出されます5
。または、メモリ内で53
数値を数値53
と51
に変換する場合があります。これにより、最終的に一部のプログラムが文字"5"
と。として表示され"3"
ます。
そして、それ53
は常に110101
です。53
メモリセルはビットのシーケンスであり、ビットとして10進数を保持します001101011
。
繰り返しますが、これらのビットを表示し、画面上に文字"5"
と文字を生成できる関数があります"3"
。
しかし、コンピューターの内部では、常に数字であり、常に2進数です。
この目的のためにコンピュータプログラムを書いてみてください。一部のプロセッサには特別な目的の10進命令がありますが、これは通常ソフトウェアで行われます。2進整数が書かれた紙片を見て、Unicodeコードポイントが書かれた紙片を作成するのがあなたの仕事だと思ってください。そうすれば、すぐに基本的な概要がわかります。
バイナリをASCIIに変換するには:
1)数値を10進数の10(1010 2進数)で割って余りを計算します。2)余りに48(「0」のASCII値)を追加します。これにより、最後の桁が得られます。3)商が0の場合は停止します。4)商が0より大きい場合は、商を使用して手順1からやり直します。
例えば。10進数(1010)を使用して51(110011)をASCIIに変換します。
110011 / 1010 = 0101 (5 decimal) remainder 0001
0001 (the remainder from above) + 110000 ('0') = 110001 (49 decimal or '1' in ASCII)
0101 (the quotient from above) / 1010 = 0 remainder 0101
0101 (the remainder) + 110000 ('0') = 110101 (53 decimal or '5' in ASCII)