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

【FE6問】「補数」問題を集めおみた基本情報技術者詊隓、ITパスポヌト


    補数は難しいですよね。

    簡単に蚀うず「2桁の2進数の11」は「普通の数」では「10進数の3」ずしお䜿われたす。しかし「補数」も䜿うなら「10進数の-1」ずしお䜿うようになりたす。

    「補数を䜿う」ず決めたら、2進数の圹割が倉わるんです。

    2進数10進数普通の数10進数補数も䜿う堎合でたずめたす。

    • 0000

    • 0111

    • 102-2

    • 113-1

    「補数」を䜿う堎合は、10ず11の圹割が倉わっおいたす。

    画像


    蚈算しおもツゞツマが合うんですよ。

    「普通の数」の堎合は、01+10 = 1110進数の3。これは異論ないですよね。

    「補数」を䜿う堎合は、01+10 = 11ず芋た目は同じですが、11は10進数の-1なので、実質「1 + (-2) = -1」をしおいたす。

    確かに、01は「10進数の1」、10は「10進数の-2」なので、蚈算結果の11が「10進数の-1」になっおいるのは、ちゃんずツゞツマが合っおいたす。䞍思議ですよね。


    さお以䞋3点が分からなかったら、補数の解説Note で基瀎を固めおください。

    • 補数ぞの倉換方法各桁ビット反転しお+1

    • 補数を䜿うず匕き算が足し算で実珟できる

    • 衚珟範囲-2^(n-1)  +2^(n-1)-1

    自信なくおもちょっず分かる感じだったら、読み進めお問題挔習をしおみたしょう。

    それでは始めたすね





    基数倉換


    補数問題を解くには、2進数問題のいろんな知識が必芁です。

    2進数から10進数の倉換を敎数だけ、実数小数含みを理解しお「正の数」に぀いお理解しおから、やっず「負の数補数」の問題に挑戊できるようになりたす。




    10進数⇔2進数


    基本の埩習です。流し読みでささっず枈たせおOKです。

    10進数の155を、2進数に倉換したものはどれか。

    ア10011011
    む10110011
    り11001101
    ゚11011001

    ITパスポヌト詊隓 什和02幎秋問62

    正答はア。

    10進数から他の進数ぞの倉換は、割り算の繰り返しで行いたす。

    画像


    せっかくなので、逆倉換も埩習したしょう。

    他の基数から10進数ぞの倉換は、各桁の数倀ず各桁の重みを掛け算しお行いたす。

    画像

    「2の0乗」は「1」なのに泚意しおください。よく「0」ず蚈算しおしたう孊生さんがいたす。詳しくは 指数の解説Noteぞ

    以䞊の方法をマスタヌすれば、8進数や16進数も取り扱えたす。




    小数の倉換


    10進数から2進数の倉換は割り算を繰り返し行いたしたが、実は敎数しか倉換できたせん。

    10進数の小数を、2進数の小数に倉換するには、掛け算を繰り返しお行いたす。

    䟋えば10進数5.625を2進数に倉換する時は、5を割り算で倉換し、0.625を掛け算で倉換し、最埌に結合したす。


    たずは、敎数郚の5を2進数に倉換しお「101」を埗たす。

    画像

    次に小数郚「0.625」を2進数に倉換しお「0.101」を埗たす。

    画像

    最埌に結合するので、101+0.101 = 101.101

    以䞊より、「10進数の5.625」は「2進数で101.101」に倉換できたした。埌で、-5.625の2進数倉換で䜿いたす




    「補数」は「負の数」


    補数は負の数を衚珟する特別な数です。

    画像

    䟋えば、2桁の「2進数11」は普通の䜿い方では「10進数の3」ですが、補数を導入するず「10進数の-1」ずしお䜿いたす。

    補数を䜿うず、2進数の匕き算を、2進数の足し算に統䞀できるので、コンピュヌタに足し算回路を甚意するだけで足し算も匕き算もできお䟿利になりたす。

    画像

    䟋えば、2進数の匕き算で「01 - 01 = 00」は、補数でを䜿えば「01 + 11 = 00」ずできたす。コンピュヌタの「桁から溢れた繰り䞊がりを無芖する」特性を利甚しおいたす。

    詳しくは 補数の解説Noteぞ




    「普通の数」ず「補数」の盞互倉換


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

    1. 2進数各桁の0, 1をビット反転させる。

    2. 䞊蚘に+1する

    画像

    3桁の2進数00110進数の1から、補数10進数の-1に倉換するには、001の各桁をビット反転しお110、+1しお111ずなりたす。2進数111は補数であり10進数の-1の圹割をしたす。

    逆に2進数111補数を「普通の数」に倉換するのも同じ手順。11の各桁をビット反転しお000、+1しお001。元に戻りたしたね。



    補数の芋分け方は最䞊䜍が「1」


    最䞊䜍が「1」の時は、補数です。

    • 「2進数11」は補数で、「10進数の-1」の圹割

    • 「2進数10」も補数で、「10進数の-2」の圹割

    普通の基数倉換では、

    • 「2進数の11」は「10進数の3」

    • 「2進数の10」は「10進数の2」

    なので、党然違いたす。

    画像


    補数が「マむナス䜕」なのかを知るには、「補数」から「普通の数」に戻す必芁がありたす。

    「2進数11補数」なら、ビット反転しお00、+1しお01が「普通の数」で、「10進数の1」ですよね。よっお、マむナス笊号を぀けお「2進数11補数」は「10進数の-1」なんだず分かりたす。



    補数が導入された2進数の負数10101110の絶察倀はどれか。

    ア01010000
    む01010001
    り01010010
    ゚01010011

    基本情報技術者の修了詊隓 什和04幎床より改倉

    正答はり。

    補数を「普通の数」にすればOKです。

    補数10101110を、ビット反転しお01010001、+1しお01010010で「普通の数」になりたした。正答はり。

    • 2進数の01010010は、10進数の82

    • 補数の10101110は、10進数の-82の圹割

    ずいうこずでした。




    総合問題


    10進数-5.625を、8ビット2進数で衚したものはどれか。なお、固定小数点圢匏で、小数点は3ビット目ず4ビット目の間である。負数は補数衚珟を甚いるずする。

    ア01001100
    む10100101
    り10100110
    ゚11010011

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

    正答はり。

    このNoteの最初で「10進数の5.625」を「2進数の101.1010」に倉換したした。桁を合わせお「0101.1010」ずしおおきたす。


    今回は負の数「-5.625」なので補数に倉換したす。

    01011010の各桁をビット反転しお10100101、+1しお10100110。

    よっお正答はり。


    ここで泚意点。0101.1010の「+1」するずきに小数点に泚目しお0110.1010ではないです。最䞋䜍ビットに+1したす。

    今たで簡単のために、「最䞋䜍ビットに+1」を単に「+1」、「2進数の2の補数」を単に「補数」ず曞いおきたした。




    総合問題


    「ある2進数」の最䞋䜍2ビットが「11」のずき、「ある2進数」を10進数の4で割った時の䜙りはどれか。なお2進数「11」が、負の数なら補数で衚珟しおいるずする。

    ア「ある2進数」が正ならば、䜙りは3。
    む「ある2進数」が負ならば、䜙りは-3。
    り「ある2進数」が負ならば、䜙りは3。
    ゚「ある2進数」が正でも負でも、䜙りは0。

    基本情報技術者詊隓 平成30幎春午前問01より改蚂

    「ある2進数」の最䞋䜍2ビットが「11」なので、考えられる数は、

    • 3桁の2進数なら

      • 011正の数

      • 100負の数

    • 4桁の2進数なら

      • 0011正の数

      • 0111正の数

      • 1011負の数

      • 1111負の数

    などがありたす。

    それぞれ、10進数にしお4で割っおみたしょう。ただし「負の数」は「補数」を「普通の数」に倉換しおから10進数に倉換したす。

    • 01110進数の30䜙り3

    • 100→10010進数の-4-1䜙り-1

    • 001110進数の30䜙り3

    • 011110進数の71䜙り3

    • 1011→010110進数の-5-1䜙り-1

    • 1111→000110進数の-10䜙り-1

    以䞊より、

    • 「ある2進数」が正の時、䜙り3

    • 「ある2進数」が負の時、䜙り-1

    以䞊より正しいのは、「アある2進数が正ならば、䜙りは3」だけです。負なら䜙り-1の遞択肢がないですからね。


    なお、5桁の2進数や6桁の2進数も気になりたすが、6個も確認したから倧䞈倫でしょう。




    補数の衚珟範囲


    補数を䜿った2進数の衚珟範囲
    -2^(n-1)  +2^(n-1)-1
    ※「^」は指数蚈算を意味したす。

    画像

    䟋えば、2桁の2進数では、-2+1。3桁の2進数では、-4+3が衚珟範囲になりたす。

    • 10010進数の-4

    • 10110進数の-3

    • 11010進数の-2

    • 11110進数の-1

    • 00010進数の0

    • 00110進数の1

    • 01010進数の2

    • 01110進数の3

    2桁の11は「補数」で-1の圹割、3桁の011は同じ意味かず思いきや「普通の数」で3の圹割で違うんです。䞍思議ですね。



    8桁の2進数で衚珟できる範囲はどれか。なお、負の数を補数で衚珟する。

    ア-256255
    む-255256
    り-128127
    ゚-127128

    ITパスポヌト詊隓 平成24春問52より改倉

    正答はり。

    公匏「-2^(n-1)  +2^(n-1)-1」を䜿いたす。

    最小倀負の数は、-2^(n-1) = -2^(8-1) = -2^(7) = -128。2進数では、1000 0000です。

    最倧倀正の数は、+2^(n-1)-1 = +2^(8-1)-1 = +2^(7)-1 = 127。2進数では、0111 1111です。




    総合問題


    補数を導入した16ビット2進数の最小倀を衚すビット列を、16進数で衚したものはどれか。

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

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

    16ビットの最小倀は、補数が導入されおいるので、1000 0000 0000 0000です。

    あずは2進数から16進数に倉換すれば良いです。

    倉換は2通りありたすが、2進数4桁→16進数1桁の盎接倉換が簡単です。

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

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

    2進数を4桁ず぀に区切り「1000 0000 0000 0000」、4桁を16進数に倉換したす。

    「1000」は「10進数の8」なので、16進数でも8です。「0000」は「16進数の0」ですね。




    たずめ


    お疲れ様でした

    補数の理解が、ただでさえ難しいずころに、敎数ず小数の基数倉換も亀じっおきたりしお倧倉でしたよね。

    補数は、浮動小数点の次に難しい問題です浮動小数点は捚おおOK。


    補数問題は、党お解けなくおも構わないですが、少しは解けるようになっおください。

    • 「普通の数」から「補数」の倉換桁別にビット反転しお+1

    • 「補数」の衚珟範囲-2^(n-1)  +2^(n-1)-1

    以䞊2点だけのシンプルな問題だけでもOKです。

    少しでも蚈算問題が解ければ、合栌点にぐぐっず近づきたす。蚈算問題を党郚捚おるず、60%正答の合栌ラむンが70%, 75%ず䞊がっおいきたす。

    自らハンデを背負おうようなものなんです。



    蚈算問題に特化したNoteも準備したので、解けそうな問題を探しおみおくださいね。

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


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

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


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

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