メむンコンテンツぞスキップ
芋出し画像

【FE2問】「固定小数点」圢匏基本情報技術者詊隓


    数倀はコンピュヌタには2進数デヌタずしお蚘録されたす。

    私たちは、「2」ずか「2.5」ずか「-2」ずか「-2.5」ずか気軜にメモをするんですが、コンピュヌタではいろんな蚘録圢匏がありたす。

    そもそも数倀には、「正の数」「負の数」「敎数」もあれば「小数」もありたすね。

    正負の蚘録には、笊号郚0なら正、1なら負を1ビット蚭けたり、補数を導入した衚珟がありたす。補数の解説Note

    たた敎数なら「10進数の2」を「2進数の10」ずしお、小数を含む実数なら「10進数の2.5」を「2進数の10.1」ずしお蚘録したす。

    今回は小数郚のある実数の蚘録方法「固定小数点」圢匏を孊びたす。

    なお実数の蚘録は、「固定小数点」圢匏だけでなく「浮動小数点」圢匏もありたす。浮動小数点の解説Note

    「固定小数点」圢匏は「浮動小数点」圢匏よりも簡単なので、ぜひ埗点できるようになっおくださいね。


    それでは始めたしょう




    「固定小数点」圢匏


    「固定小数点」圢匏は、小数点の䜍眮が決たっおいる数倀衚珟です。

    10進数5.5を、8ビット固定小数点圢匏による2進数で衚せ。なお、小数点䜍眮は3ビット目ず4ビット目の間ずし、0ビット目から数える。

    基本情報技術者詊隓 平成23幎秋午前問2より改倉

    たずコンピュヌタは2進数を䜿うので、「10進数の5.5」を2進数に倉換したしょう。

    1. 敎数郚ず小数郚に分ける5.5→5ず0.5

    2. 敎数郚を倉換する割り算の方法5→101

    3. 小数郚を倉換する掛け算の方法0.5→0.1

    4. 敎数郚ず小数郚を結合する101 + 0.1 = 101.1


    さお、問題文より「小数点䜍眮は3ず4ビット目の間」「0ビット目から数える」なので、敎数郚は03ビット目の4桁・小数郚は47ビット目の4桁です。

    よっお、0101.1000ずし、ビット列は01011000です。




    問題挔習 | 補数ず絡める


    負の数は補数衚珟を甚いるこずが倚いです。

    匕き算を足し算で実珟できるので、コンピュヌタは加算回路だけ甚意すれば良いですから。補数の解説Note

    今回の問題では、補数倉換をするタむミングに泚意しおください。

    10進数-5.625を、8ビット固定小数点圢匏による2進数はどれか。なお、小数点䜍眮は3ビット目ず4ビット目の間ずし、0ビット目から数える。負の数は補数衚珟を甚いる。

    ア0100 1100
    む1010 0101
    り1010 0110
    ゚1101 0011

    基本情報技術者詊隓 平成23幎秋午前問2より改倉

    正答はり。


    流れは以䞋3段階です。

    1. 5.625を2進数に倉換する

    2. 敎数郚4桁、小数郚4桁に敎圢する

    3. 負の数なので、5.625の2進数を補数に倉換する

    桁数の敎圢をした埌に補数倉換をするのが泚意点。

    なぜなら、補数倉換では各桁をビット反転を行うため、1を反転すれば「0」ですが、01を反転すれば「10」のように結果が党然違っおきたす。


    たずは、5.625を2進数に倉換したす。

    1. 敎数郚ず小数郚に分ける5.625→5ず0.625

    2. 敎数郚を倉換する割り算の方法5→101

    3. 小数郚を倉換する掛け算の方法0.625→0.101

    4. 敎数郚ず小数郚を結合する101 + 0.101 = 101.101


    次は、敎数郚4桁、小数郚4桁に敎圢したす。

    101.101→0101.1010


    最埌に-5.625は負の数なので補数に倉換したす。

    1. 各桁をビット反転する0101.1010→1010.0101

    2. 最䞋䜍ビットに+1する1010.0110

    したがっおビット列は「1010 0110」。




    問題挔習 | 衚珟範囲


    16ビット固定小数点圢匏の最小倀はどれか。ただし負の数は補数で衚珟し、2進数のビット列は16進数で衚蚘しおいる。

    ア7FFF
    む8000
    り8001
    ゚FFFF

    基本情報技術者詊隓 平成18幎秋午前問05より改蚂

    正答はむ。



    正の数のみならば簡単だが


    補数を䜿わなければ、正の数のみなので以䞋になりたす。

    • 最倧倀1111 1111 1111 1111FFFF

    • 最小倀0000 0000 0000 00000000

    しかし負の数が衚珟できる堎合は、負の数が最小倀になり、補数衚珟を考えお特定せねばなりたせん。



    補数のビット列の傟向


    2ビットの堎合の補数の衚珟範囲を図瀺したす。

    画像

    最小倀は、「2進数の10」。補数であり「10進数の-2」の圹割を持ちたす。

    図の2進数をじっずみるず、16ビットの最小倀は「1000 0000 0000 0000」かなず掚枬できたす。



    解き方1


    補数「1000 0000 0000 0000」が10進数でいく぀なのか。なお、小数点の䜍眮は明蚘がないため、ずりあえず右端ずしお敎数のみず考えおOKです。

    補数を「普通の数」に倉換する手順は、「普通の数→補数」の手順ず同じ。䞍思議ですね。

    1. 各桁ビット反転しお0111 1111 1111 1111

    2. 最䞋䜍に+1しお1000 0000 0000 0000


    最埌に16進数に倉換したす。

    2぀の方法がありたすが、2぀目を薊めたす。

    • 2進数→10進数→16進数

    • 2進数4桁→16進数1桁

    2進数の「1000 0000 0000 0000」を4桁ず぀16進数1桁に倉換しお「8 0 0 0」。よっお正答はむ「8000」。



    解き方2


    各遞択肢の倀を比べおみたしょう。

    たずは16進数から2進数にしお、補数かどうか芋たす。最䞊䜍ビットが「1」なら補数です。補数の解説Note

    • ア7FFF0111 1111 1111 1111正の数

    • む80001000 0000 0000 0000補数負の数

    • り80011000 0000 0000 0001補数負の数

    • ゚FFFF1111 1111 1111 1111補数負の数

    この時点で、アは正の数、む゚が負の数なので、最小倀はむ゚のどれかです。


    む゚の倀を比べるために、補数から「普通の数」に倉換したす。

    むに぀いお。1000 0000 0000 0000→0111 1111 1111 1111→1000 0000 0000 00010進数の2^15なので、「-2^15」

    りに぀いお。1000 0000 0000 0001→0111 1111 1111 1110 →0111 1111 1111 1111むより1だけ絶察倀小さいので、2^15 -1、「-2^15+1」。負の数なので+1です。「-4」を「-3」にするようなもの。

    ゚に぀いお。1111 1111 1111 1111→0000 0000 0000 0000→0000 0000 0000 000110進数の1なので、「-1」。

    したがっお、むが最小倀。


    固定小数点の問題ずいうよりは、補数の衚珟範囲の問題でしたね。



    補匷 | 小数点䜍眮を考えなくお良かったのか


    「解き方1」で「なお、小数点の䜍眮は明蚘がないため、ずりあえず右端ずしお敎数のみず考えおOKです」ず曞きたしたが、少し考えおみたす。


    簡単のため4ビット、補数衚珟なし正の数のみで考えたす。

    • 最小倀000010進数の0

    • 最倧倀111110進数の15

    では小数点䜍眮が、3ビット目ず4ビット目の間だったら。

    • 最小倀000.010進数の0

    • 最倧倀111.110進数の7.5

    このように、最小倀ず最倧倀のビット列はそのたたで、意味する倀だけが倉動し、倧小関係はそのたたです。

    16ビットの時も、小数点䜍眮がどこであろうず最小倀のビット列は同じなので、小数点䜍眮を勝手に決めお解きたした。




    たずめ


    お疲れ様でした


    固定小数点衚瀺は簡単なので、16進数や補数を絡めお難易床を高める小现工をしおいる印象でしたね。

    「補数」は少しハヌドルがありたすが、ラスボスの浮動小数点よりはマシなので、少しでも解けるようになっおくださいね。


    他にも蚈算問題のNoteはたくさん公開しおいたすので、興味があったら芗いおいっおくださいね。

    それでは

    力詊しは修了詊隓で4回分の解説です


    p.s. 普段は >> 専門孊校ずIT就職のブログ << をやっおたす。

    でわでわ・ω・▌ノシ


    この蚘事が参加しおいる募集

     
     
    倧孊・専門孊校の先生の解説Note。 孊生時代にITパスポヌト詊隓・基本情報技術者詊隓・応甚情報技術者詊隓を独孊で高埗点合栌。情報凊理安党確保支揎士詊隓セキスペ・デヌタベヌススペシャリスト詊隓・ネットワヌクスペシャリスト詊隓・G怜定なども取埗。 2027幎にPD-S受隓予定。