JavaRush /Java Blog /Random-JA /コンピューターのメモリ内の実数。説明。
Marianna
レベル 9
Москва

コンピューターのメモリ内の実数。説明。

Random-JA グループに公開済み
こんにちは 最初のクエスト (セクション 2. 浮動小数点数の構造) の講義「実数の操作のニュアンス」と、このトピックに関する追加の講義を学習しているときに、多くの人がこのトピックに関する多くの質問に遭遇したはずです。当初、私は必要な答えを自分自身に与えようとしましたが、現在は、一貫した論理的順序で完全に理解できるように、それらを提供します。 1. 10 進数と 2 進数のシステム。 1.1 10進数体系は最も一般的な体系の 1 つであり、学校、大学、生活の中でコンピュータを使用しない数学的計算に使用されます。1、2、3、4、5、6、7、8、9、0 (アラビア語) の合計 10 桁の数字が使用されます。数字にはローマ字表記もありますが、現在はほとんど使用されていません。10進法では、数十、百、千、数万、数十万、百万などの単位で数えます。- 言い換えれば、これらはすべて数字の桁です。 数値の桁は、数値レコード内の桁の位置(位)です。自然数の最下位桁 (および最下位)単位桁 (右端) です。なぜ彼は最も取るに足らない存在なのでしょうか?数値の単位桁を削除することで、数値自体の変化は最小限になるからです (たとえば、数値 345 と 340)。次に、2 桁目は 10 の桁、というようになります。これは一体何を意味するのでしょうか?10 進法で任意の整数を取得し、それを数字に分解してみましょう。 3297 = 3*1000 + 2*100 + 9*10 + 7 したがって、数値3297には、4 桁目の 3 単位(つまり、3,000)、3 桁目の 2 単位(200)、9が含まれることがわかります。 2 桁目(9 の 10) の単位と1 桁目の 7 単位。言い換えれば、この数は3,297であり、したがって、位置です。小数(実数)の桁はどうなるでしょうか? 小数の桁(小数部)は、 10 分の1、100 分の 1、1000 分の 1、1000 分の 1 などと呼ばれます。数字が小数点から (数値の整数部分から) 離れるほど、その桁の重要性は低くなります(小数点を破棄すると、数値の値はほとんど変化しません)。たとえば、小数として表示される小数を考えてみましょう。 25.076 = 2*10 + 5 +0*0.1 + 7*0.01 +6*0.001 したがって、小数25.076には 2 の 10 の位、5 の単位、0 の 10 の位が含まれることがわかります。 、100分の7と1000分の6。 10 進法は 10 桁と 10 桁の倍数を使用するため、「10 進数」という名前が付けられています。 1.2 2 進数体系は、ほとんどすべての現代のコンピュータおよびその他のコンピューティング電子デバイスで使用されている数体系です。数字を記録するには、 0 と 1の 2 桁だけを使用します。 数字がどの記数法で書かれているかを混同しないように、右下にインジケーターが付いています (これは記数法の基本です)。例: 1000₁₀ 1000₂ ここで、最初の数字は 10 進法でおなじみの1000で、下の数字は 2 進法で表現された数字で、10 進法では等しいです... 8 ! 10 進法と同様に、2 進法でも数値をに分解します。2 進数の各桁はビット(または) と呼ばれます。(興味のある人は、4 ビットがニブル(または 4 進数)、8 ビットがバイト、16 ビットがワード、32 ビットがダブルワードであると説明してください)。ビット (数字) にも、 (10 進法とは異なり) 0 から始まって右から左に番号が付けられます。右の最下位ビットのシーケンス番号は0です。次に最初のビット、2 番目ビットなどと続き、ビットが古いほど重要になります (10 進法から類推すると、1455 という数字から 1 を削除すると、1450 という数字が残ります) - 最初の値とほぼ同じですが、百の位を削除すると、百の位の方が単位の位よりもはるかに重要(高次)であるため、すでに初期値から遠く離れた数値 1050 が残ります。 )。 例。 まだ読まないでください:))) コンピュータメモリ内の実数。 開発中で!!! - 2 下部では、この小数 2 進数のビットに赤色で番号が付けられています。この数値は合計 18 ビット (桁) あります。今後については、小数はまったく異なる方法でコンピュータのメモリに保存されることに注意してください。これについては後で説明します。それまでの間、ある数値体系から別の数値体系に数値を変換する方法を学びましょう。 2. 整数と分数を 10 進法から 2 進法へ、またはその逆に変換します。 2.1 10 進数から 2 進数への変換。 2.1.1 整数。 整数の 10 進数を 2 進数に変換するには、この数値を 2 で割って、その余りを書き留める必要があります (数値が偶数か奇数かに応じて、常に 0 または 1 に等しくなります)。 、再び除算の結果を 2 で除算し、再び除算の余り (0 または 1) を書き留め、2 番目の除算の結果を再び 2 で除算します。除算の結果が 1 になるまでこの方法を続けます。次に、常に 1 に等しい最新の除算結果から始めて、結果として得 られるすべての 0 と 1 を逆順に書き留めます任意の INTEGER を 2 で順次除算した最終結果は、常に 1 になります。結果が 1 より大きい場合、結果として 1 が得られるまで、この結果を 2 で除算し続けます。また、2 で除算した結果がゼロ (0) になる可能性があるのは 1 つのケースのみです。これは、ゼロそのものを 2 で除算したものです 145 という数字を10 進数から 2 進数に変換してみましょう。 145/2 = 72 (余り1 ) 72/2 = 36 (余り0 ) 36/2 = 18 (余り0 ) 18/2 = 9 (余り0 ) 9/2 = 4 (余り1 ) 4/2 = 2 (剰余0 ) 2/2 = 1 (剰余0 ) 次に、逆の順序で 2 進数を「収集」します。番号10010001を取得しました。完了です。 興味深いニュアンス 1.数値 1 を10 進数から 2 進数に変換してみましょう。二進法では、この数値は 1 とも表されます。結局のところ、2 で割った最終結果は 1 に等しいはずですが、すでに数値 1 そのものに等しいのです。1₁₀ = 1₂興味深いニュアンスです。2.変換してみましょう数値0 を 10進数から 2 進数に変換します。2 進法では、この数値は 0 とも表されます。0₁₀ = 0₂ 2.1.2 分数。 小数を2進数に変換するにはどうすればよいですか? 小数部を二進数系に変換するには、次のようにする必要があります: a) 2.1.1 項で学習したアルゴリズムに従って、 分数の全体部分を二進数系に変換します。 b)分数の小数部に 2 を乗算し、次のように書きます。結果の小数点の前の結果の桁 (常に 0 または 1 に等しく、これは論理的です)、その後、得られた結果の小数部分のみを再び 2 で乗算し、結果の結果の桁を小数点 (0 または 1) の前に書き留めるなど、小数点が得られるまで続けます。乗算結果の一部が 0 になるか、必要な小数点以下の桁数(必要な精度) (2 の乗算数に等しい) になるまでです。次に、実数 (小数) の整数部と小数部を区切る 点の後に、結果として書き込まれた 0 と 1 のシーケンスを順番に書き留める必要があります。例 1. 数値2.25 (100 分の 2 ポイント 25) を 10 進法から 2 進法に変換してみましょう。2 進法では、この分数は10.01に等しくなります。どうやってこれを入手したのでしょうか?この数値は、整数部分 (あるポイントまで) (これは 2) と小数部分 (これは 0.25) で構成されます。 1) 全体の変換: 2/2 = 1 (余り0 ) 全体の部分は10になります。 2)小数部の翻訳。 0.25 * 2 = 0 .5 (0) 0.5 * 2 = 1 .0 (1) 続けて 2 を掛けた結果、小数部分が 0 になりました。掛け算を停止します。ここで、小数部分を順番に「収集」します。2進法では 0.01が得られます。3)整数部分と小数部分を加算します。小数部分2.25 が二進小数部分10.01に等しいことがわかります。 例 2. 数値0.116を10 進数から 2 進数に変換してみましょう。0.116 * 2 = 0.232 (0) 0.232 * 2 = 0.464 (0) 0.464 * 2 = 0.928 (0) 0.928 * 2 = 1.856 (1) //この結果の整数部分を破棄 0.856 * 2 = 1 .712 (1) ) //この結果の全体を破棄 0.712 * 2 = 1 .424 (1) //この結果の全体を破棄 0.424 * 2 = 0 .848 (0) 見てわかるように、乗算は延々と続きます。、結果の小数部分は 0 に等しくなりません。次に、小数点以下 (小数部分) 以降7 桁 (ビット) の精度で小数を 2 進数に変換することにします。重要でないビットについて勉強したことを思い出してください。ビット(ビット)が全体の部分から遠ざかるほど、無視されやすくなります(忘れた人は講義のセクション 1 で説明します)。ドットの後に 7 ビットの精度で 2 進の 小数0.0001110が得られます。2.2 2 進数から 10 進数への変換。 2.2.1 整数。全体 を訳すと数値を 2 進数系から 10 進数に変換するには、この数値を桁 (ビット) に分割し、各桁 (ビット) に数値 2 を一定の正の次数まで乗算する必要があります(この次数は、最下位から右から左に数え始めます) (右ビット) 0 から始まります)。言い換えれば、2 の累乗は特定のビットの数に等しいということです (ただし、この不文律は整数を変換する場合にのみ使用できます。これは、小数の場合、ビットの番号付けは変換される小数部分から始まるためです)。 10 進法に別の方法で変換します)。次に、結果の製品を 合計する必要があります。例。 2 進数110011を 10 進数に変換してみましょう。 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2° = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ その結果、次の数値 51 が得られます。 バイナリーシステム。参考までに、以下に数値 2 の 1 乗の表を示します。 まだ読まないでください:))) コンピュータメモリ内の実数。 開発中で!!! - 5 数値のゼロ乗は常に 1 である ことに注意してください 。 2.2.2 分数。2 進の小数 (実数) を 10 進数に 変換するには、次の手順を実行する必要があります。 a) 2.2.1 項のアルゴリズムに従って、その整数部分を 10進数に変換します。 b)小数部分を次のように翻訳します。小数部は、特定の負の累乗した桁の 2 の積の合計として表す必要があります(小数点以降(分数の整数部の後)の最初の桁の累乗は -1 に等しくなります)。小数点の後の 2 桁目は -2 に等しくなります)結果として、この金額は10 進法の数値の小数部になります。 例。 数値10111.01を2 進法に変換してみましょう。 10111.01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) 。(0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) 。(0 + 0.25) = 23.25₁₀ その結果、10 進法では23.25 という数値が得られます。2 の最初の負の累乗の表を以下に示します。 2.2.3 数値を 2 進数から 10 進数に変換するための一般的な公式。 数値を 2 進数から 10 進数 (整数部と小数部の両方) に変換するための一般的な公式を示しましょう。 ここで、Aは 2 進数系の数値です。 数値体系の基数は 2 (各ビットに 2 の累乗を乗算することを意味します) です。 nまだ読まないでください:))) コンピュータメモリ内の実数。 開発中で!!! - 7 まだ読まないでください:))) コンピュータメモリ内の実数。 開発中で!!! - 4整数の桁数 (ビット) ; mは、数値の小数点以下の桁数 (ビット) です。 分割点からの整数部分の最初のビットが赤色で強調表示されます。常に 2 の 0 乗が乗算されます。その前 (左側) の次のビットは 2 の 1 乗倍されます。 分割点からの小数部分の最初のビットが緑色で強調表示されます。常に 2 のマイナス 1 乗が乗算されます。右隣のビットは 2 のマイナス 2 乗倍されます。 3. 科学的表記法: 両方のシステムで正規化された表記法。仮数、指数、指数の次数。 3.1 数値を書く指数形式。以前に、位置番号を桁ごとに 記録するための詳細なスキームを検討しました。数値0.0000000000000000000016を考えてみましょう。標準形式では非常に長いエントリがあります。そして指数形式では次のようになります: 1.6 * 10ˉ²¹ それでは、数値の指数形式とは何でしょうか?また、この形式で数値を表す方法は何でしょうか? 数値の科学表記法は、実数を仮数指数として表現したものです。非常に大きな数字と非常に小さな数字を表現したり、表記を統一したりするのに便利です。 N = M * pⁿ ここで、 Nは書き込まれる数値、 Mは数値の 仮数、 p は 基数(指定された数値の記数系の基数に等しい)、 n (整数) は位数(次数) 、正と負のいずれかになります)、 p の n 乗は特性数(指数、つまり底の累乗(次数))です。 重要なニュアンスです。10 進数の整数部分が 0 と異なる場合、指数の次数 (次数) は正になり、整数部分が 0 に等しい場合、指数の次数は負になります。 3.2 数値の通常および正規化された形式。 数値の標準形式は、仮数部 (符号を考慮しない) が半区間 [0,1] に位置する形式、つまり 0 <= M < 1 です。この書き込み形式には次のような特徴があります。欠点: 一部の数値があいまいに記述されています (たとえば、0.0001 は0.000001*10²、0.00001⋅10¹、0.0001⋅10°、0.001⋅10ˉ¹ などと記述できます) したがって、別の形式の記録が (特にコンピューターサイエンスにおいて) 普及しています -正規化、10 進数の仮数は1 (両端を含む) から 10 (両端を含まない) までの値を取ります。つまり、1 <= M < 10 です (同様に、2 進数の仮数は 1 から 2 までの値を取ります))。言い換えると、 10進法の仮数は1.0 (両端を含む) から 10 (両端を含まない) までの小数でなければなりません。仮数の整数部分には 1 桁の数字が含まれている必要があり、小数部分は数学的に制限されません。 正規化形式の利点は、任意の数値 (0 を除く) が独自の方法で書き込まれることです。欠点は、この形式で 0 を表すことができないことです。そのため、コンピュータ サイエンスにおける数値の表現では、数値 0 に特別な符号 (ビット) が提供されます。 3.3 指数正規化形式で 10 進数を記述する例 例を見てみましょう例 1. 10 進数1015000 (100 万 15000) を指数正規化形式で書いてみましょう。この数値の記数法は 10 進数であるため、底は10になります。仮数部を選択しましょう。これを行うには、数値を分数として想像します。その小数部は (数値は整数であるため) 0 になります: 1000000.0。数値の整数部分が0より大きい場合は、整数部分に1 桁だけが残るまで、点を初期位置の左側 (整数部分の内側) に移動します。その後にピリオドを置きます。重要でないゼロ (数値の末尾) は無視されます。1.015に等しい数値の仮数が得られます。数の底の次数(次数)を決めてみましょう。整数部と小数部を区切る点は左に何桁移動しましたか? 6 ポジション用。これは、順序が6になることを意味します。この場合、順序は正です(0 に等しくない数値の整数部分の点を移動しました)。正規化された形式の最後のエントリ: 1.015 * 10⁶。この数値は1.015E6という形式で書くことができます(E6 は 10進数の指数、つまり 10 の 6 乗です)。自分自身をテストしてみましょう。数値の指数表記は、数値 (仮数) と別の数値 (指数) の積に他なりません。1.015 に 10⁶ を掛けるとどうなりますか? 1.015*10⁶ = 1.015*1000000 = 1015000。それは正しい。このアプローチ(正規化)は、明確なレコードの作成に役立ちます 上で示したように、指数形式の数値。 例 2. 10 進実数0.0098を正規化形式で書いてみましょう。数値の基数を強調表示しましょう。これは10 (10 進数システム) に相当します。数値の仮数を選択しましょう- これは9.8です (数値の整数部分は 0 に等しいので、点を右の最初の有効数字 (1 から 9 までの範囲内) に移動することを意味します)数値の順序を決定します-点を 3 位置移動しました。これは、順序が3であることを意味します。それは負ですか? 正ですか? 点を右に (数値の小数部で) 移動したので、次数 (べき乗) は負になります。正規化された形式の数値の最終レコードは9.8 * 10ˉ³または9.8E-3です。もう一度確認してみましょう。9.8 に 10ˉ³ を掛けます 。9.8 * 10ˉ³ = 9.8 * 0.001 = 0.0098です。そうです。 例 3. 10 進実数3.56を正規化された形式で書きましょう。数値の底を選択します - 10 (10 進数システム) に等しいです。数値の仮数を選択します - それは... 3.56 (整数に等しい)数値の一部は 0 ではなく、1 桁です。これは、小数点をどこにも移動する必要がなく、数値自体が仮数になることを意味します。) 基数の順序を強調表示しましょう: 仮数は何番目でなければなりません。 、数値自体に等しいが、変化しないように乗算されますか? ユニットごと。これは、次数がゼロになることを意味します。正規化された形式の数値の最終レコードは、3.56 * 10°、つまり3.56E0 です。 4. 実数をコンピュータのメモリに保存する: float と double。 4.1 型は float と double です。 講義の重要なセクションに移りましょう。すでにご存知のとおり、Java にはfloatdoubleという 2 種類の実数があります。float型はコンピュータ メモリの32 ビットを占有し、範囲[3.4E-38; 3.4E+38) (つまり、3.4*10ˉ³⁸ (両端を含む) から 3.4 * 10ˉ³⁸ (除外) の範囲内)。 重要なニュアンス 1.浮動小数点数は正または負のいずれかになります。上記の範囲は、float 範囲に含まれる数値のモジュールを示すために示されています。 重要なニュアンス 2. 10³⁸ は2¹²⁷にほぼ等しい、10 ˉ³⁸ は2ˉ¹²⁷にほぼ等しい。したがって、浮動小数点数の絶対値の間隔は [3.4 * 2ˉ¹²⁷; 3.4 * 2¹²⁷)。double タイプは2 倍のコンピュータ メモリを占有します -64 ビットで、範囲[-1.7E+308; 1.7E+308)それぞれ。 4.2 2 進数の指数正規化形式。 私たちは、数値がコンピューターのメモリにバイナリ形式で保存されていることを知っています。そこで、数値1560.256 (float 型) を取得し、それを位置形式の 2 進法に変換してみましょう: 11000011000.01000001100。これがコンピュータのメモリにどのように保存されるのかと思うかもしれません。しかし、それは真実ではありません! コンピューターのメモリでは、float 型double型(実浮動小数点型) は指数正規化形式で格納されますが、べき乗の底は10 ではなく 2 です。これは、上で述べたように、すべてのデータがメモリ内のコンピュータはバイナリ形式 (ビット) で表されます。一定量のコンピュータ メモリが数値に割り当てられます。正の数15.2を正規化指数形式1.52*10¹で 表してみましょう。次に、同じアルゴリズムを使用して、 バイナリの「ツイン」1111.00110011001を指数正規化表記でも表してみます。 1) 底は2 に等しくなります。 2)仮数は1.11100110011001 に等しくなります 。 3) 次数は正で 3 に等しくなります。 (ポイントは 3 ビット左にシフトされます) 10 進数です。これを二進法に変換しましょう: 11。したがって、バイナリ指数正規化形式では、1.11100110011001 * 2¹¹ となります 4.3浮動小数点数の指数正規化バイナリ形式をコンピュータのメモリに保存する。 そこで、実数は指数正規化されたバイナリ形式でコンピュータ メモリに保存されることがわかりました。記憶の中ではどう見えるでしょうか?float型を考えてみましょう。コンピュータは各浮動小数点数に32 ビットを割り当てます。以下のように配布されています。この図は、コンピュータの 32 ビット浮動小数点数に割り当てられたメモリを概略的に示しています。 まだ読まないでください:))) コンピュータメモリ内の実数。 開発中で!!! - 5 ビット番号は赤色で示されます。 緑色は、数値の符号を格納するために割り当てられたメモリ (1 ビット) を示します。 黄色は、数値の指数形式 (8 ビット) のシフトされたべき乗 (次数) を保存するために割り当てられたメモリの一部を示します。 は、暗黙の単位 (23 ビット) を持たない数値の正規化された仮数を格納するために割り当てられたメモリの一部を示します。詳しく見てみましょう。 1) 符号ビット。最上位 (左から 1 番目) ビットは常に数値の符号を格納するために割り当てられます (数値が負の場合は 1、数値が正の場合は 0)。例外は数値ゼロです。プログラミングでは、ゼロは負にも正にもなり得ます。 2)次に、基数2の指数の次数 (次数) のビットが続きます。このために8 ビットが割り当てられます。私たちが知っているように、浮動小数点数値 の指数次数は、(整数部が 0 の数値の場合、3.3 節を参照) と正 (整数部が 0 以外の数値の場合) の両方の値があり、その範囲は 2ˉ¹²⁷ から2¹²⁷です 。理論的には、符号ビットの場合と同様に、指数の符号を決定するために 1 ビットを割り当てる必要があります。しかし、そうではありません。 指数の符号を決定する際に無駄を省くために、浮動小数点数は指数に半バイト +127 (0111 1111) のオフセットを追加します。したがって、コンピュータは 2ˉ¹²⁷ から 2¹²⁷ までの範囲の累乗の代わりに、0 から +254 までの範囲の累乗を保存します。 すべての累乗値は正であり、符号に余分なバイトを無駄にする必要はありません。指数の値が可能な値に対して半分シフトしていることがわかります。これは、指数の実際の値を取得するには、メモリに格納されている値からこのオフセットを減算する必要があることを意味します。メモリに格納されている指数値がオフセット (+127) より小さい場合、指数は負になります。これは論理的です。 例。負の次数-18 のシフトを実行してみましょう。これにオフセット +127 を追加すると、次数 +108 の値が得られます (計算では次数 0 を忘れないでください)。度数をバイナリ形式に変換しましょう: 1101100 ただし、度数には 8 ビットのメモリが割り当てられており、ここでは 7 ビットの数値が得られます。コンピュータは、空いている空の上位桁 (ビット) の代わりに 0 を追加します。 その結果、この次数はコンピュータのメモリに01101100として保存されます。+108 < +127 を見てみましょう。これは、次数が実際には負であることを意味します。次の興味深い表を考えてみましょう。 これは、2 進数および 10 進数の正規化形式の浮動小数点数のべき乗のすべての可能な値を示しています。ご覧のとおり、2 進法では +127 はバイト全体 (8 ビット) のちょうど半分です。 3)残りの23 ビットは仮数用に予約されています まだ読まないでください:))) コンピュータメモリ内の実数。 開発中で!!! - 十一しかし、正規化され2 進仮数の場合、仮数の数は1<=M<2 (および講義の段落 2.1.1 も思い出してください)。唯一の例外は数値 0 です。割り当てられた 23 ビットに単位を書き込んでメモリを浪費しても意味がないため、仮数の残り(小数部) が割り当てられた 23 ビットに書き込まれます。基本的に浮動小数点数の有効部分の長さは 24 で、そのうち 1 ビット少ないビットが格納されることがわかります。 重要なニュアンスです。10 進法の分数を 2 進数に変換すると、2 進数の小数部分が巨大になることがよくあることを思い出してください。また、浮動小数点数を格納するには 32 ビットしかありません。この場合、2 進小数の最下位の最下位桁 (この講義の 2.1.2 項を思い出してください) は割り当てられたメモリに含まれず、コンピュータはそれらを無視します数値の精度は失われますが、最小限です。つまり、小数浮動小数点の精度は小数点以下6 ~ 7 桁です。4.4 数値doubleの指数正規化されたバイナリ形式をコンピュータのメモリに保存する。double 型の実数は、いくつかの特性を除いて、float 数値と同じ方法でコンピュータ メモリに格納されます。コンピューターのメモリでは、倍精度の数値は64 ビットです。これらは次のように配置されます (これも左から右の順序です): 1)符号ビット(4.3 項を参照)。このビットの数は63になることがわかります。 2)度数(順序)。倍精度数値には、それを格納するために11 ビットが割り当てられます。度数シフトも実行されますが、倍精度数値の場合は +1023 と等しくなります3)仮数部 (重要な部分)。倍精度数値には52 ビット(桁) が割り当てられて格納されます。また、仮数の正確な整数部分 (暗黙的な単位) はメモリに格納されません。小数倍精度の精度が小数点以下約16 桁であることにも注意してください。 4.5 コンピュータのメモリ内で 10 進法の実数を表す例。 そして、私たちの講義の最後のポイントは、トピックの理解を強化するために、10 進数体系の小数をコンピュータ メモリ内のストレージ形式に変換する例です。 例 1. 数値を取得する -4.25フロートタイプ。この講義で説明したことをすべて思い出しながら、それを 2 進数体系の指数正規化形式で表現してみましょう。 1)数値の整数部分を2 進数形式に変換します。 4/2 = 2 (除算0の余り) 2/2 = 1 (除算0の余り) 整数部分は、2 進法では 100に等しくなります。2)数値の小数部分をバイナリ形式に変換します。0.25*2 = 0.5 ( 0 ) 0.5*2 = 1.0 ( 1 ) 小数部は2 進法では 0.01になります。3)したがって、 -4.25₁₀ = -100.01₂ となります。 4)数値 -100.01₂ を2 進数系の指数正規化形式に変換しましょう(累乗の底が 2 になることを意味します)。-100.01₂ = -1.0001 *2² 度の値を10進数形式から2 進数に変換してみましょう。2/2= 1 (余り0 ) 次数は10₂ です。数値 -4.25₁₀ は、バイナリ指数正規化形式で-1.0001 * 2¹° に等しいことがわかります。これがコンピューターのメモリ内で どのように表示されるかを書き留めてみましょう。符号ビットは1 (負の数) になります。指数オフセットは 2+127 = 129₁₀ = 10000001₂に等しくなります。仮数 から暗黙の 1 を削除すると、 00010000000000000000000が得られます(空いている下位ビットを0 で埋めます)。 結論。1 10000001 00010000000000000000000 - これは、数値 -4.25 がコンピューターのメモリに保存される方法です。 例 2.浮動小数点数0.75₁₀をコンピュータ メモリ内のバイナリ ストレージ形式に 変換します。結果は0 01111110 100000000000000000000000となるはずです。清聴ありがとうございました。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION