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

【補数たでは頑匵れ】混乱を玐解く「2段構え」の補数講座基本情報技術者詊隓


    このNoteは、補数問題に正解する最䜎限のスキル、もし混乱した時の察策に分けおたずめおいたす。

    必ず理解しお欲しいのは3点です。

    ①補数の䜜り方
    「各桁ビット反転しお+1」
    「普通の数」→「補数」も「補数」→「普通の数」も同じ手順でOK。

    画像

    もちろん逆手順図のオレンゞのように、-1しお反転しおもできたす。でも、同じ「反転しお+1」で盞互に倉換できるので1皮類だけ芚えればOKです。䞍思議ですよね。


    ②補数の意味
    マむナスの数を「補数」で衚すず、匕き算を足し算でできるので、コンピュヌタは足し算回路だけ甚意すれば良くなるのがメリット。

    画像

    䟋えば、111は「普通の数」ずしお䜿うず10進数の7ですが、「補数」によっお10進数の-1ずしお䜿うず、匕き算を足し算にできたす。1 - 1 = 001 - 001ず蚈算するずころを、1 - 1 = 1 + (-1) = 001 + 111ずしおいたす。


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

    画像

    䟋えば、2桁の2進数では、-2+1。

    −2(2−1)+2(2−1)−1=−2+1-2^{(2-1)}  +2^{(2-1)}-1\\= -2+1

    3桁の2進数では、-4+3

    −2(3−1)+2(3−1)−1=−22+22−1=−4+3-2^{(3-1)}  +2^{(3-1)}-1\\ = -2^2  +2^2-1 \\ = -4+3


    私のIT専門孊校の孊生さんも、以䞊3点をたずは芚えお正解しおいたす。

    しかし勉匷を進めるず、芚える公匏はたくさん出おきお、勘違いしたりド忘れしたりしお䞍正解になる孊生さんも倚くなりたす。

    そこで粘り匷く正解できる察策も「補匷」ずしお曞いおおきたした。

    たずは「必須」の3個を読んでください。
    そしお今埌䞍正解になったり、もう少し深く理解したくなったら「補匷」を読んでみおくださいね。

    隙を生じぬ二段構え私の魂のマンガより


    それでは始めたしょう




    必須 | 補数の䜜り方


    補数の䜜り方は「各ビットを0,1反転させお+1」です。
    「普通の数」から「補数」、「補数」から「普通の数」も同じ手順です。

    䟋えば、2進数001普通の数から「補数」を䜜っおみたす。

    001の「各ビットを0,1反転」しお、110。110に「+1」しお111です。

    2進数001は10進数の1。「001の補数111」を「10進数の-1」ずしお䜿いたす。


    次に、補数111から「普通の数」に戻しおみたす。手順は同じ䞍思議ですよね。

    2進数111補数の「各ビットを0,1反転」しお、000。000に「+1」しお001です。元の001に戻りたしたね。


    勿論「普通の数→補数」の「各ビットを0,1反転、+1」の逆工皋、「-1しお、各ビットを0,1反転」でも戻りたすよ。

    2進数111補数の「-1」しお、110。110の「各ビットを0,1反転」しお、001図のオレンゞ。

    画像

    でも「各ビット0,1反転、+1」だけで「盞互」倉換できるので、むチむチ䜿い分けなくお良いですね。心配な方は、いく぀かの数で曎に詊しお「どっちの倉換でも同じ手順でOK」を確認しおみおくださいね。




    必須 | 補数を䜿う意味


    「なぜ補数なんお、わけ分らん数を䜿うんだ」ず思いたすが、答えはコンピュヌタの蚈算が楜になるからです。

    マむナスの数を「補数」で衚すず、匕き算を足し算でできる

    私たちも足し算では繰り䞊がり、匕き算では繰り䞋がりを考えたり倧倉ですよね。でも補数を䜿うず、匕き算も足し算で蚈算できるようになりたす。

    コンピュヌタも足し算回路だけ準備すれば良く、匕き算回路が䞍芁になるので、メリットなんです。


    画像

    先ほどの「3桁の2進数」の䟋で考えおみたす。

    • 2進数の001「普通の数」で10進数の1ず同じ

    • 補数の111「補数」で10進数の-1ず同じ

    足し算するず、001 + 111 = 1000ずなりたすよね。

    ここでコンピュヌタの特性。

    コンピュヌタは準備した桁から溢れた数は無芖する

    ぀たり「3桁たでの蚈算ができる」コンピュヌタでは、1000の「4桁目の1」は無芖され、蚈算結果は3桁目たでの「000です」ずなるんです。

    2進数の000は、10進数の0ですよね。

    したがっお「001 + 111」は、10進数でいう「1 + (-1)」を蚈算したのず同じです。


    本来は10進数の「1 - 1 = 0」を2進数「001 - 001 = 000」ず蚈算したすが、「001 + (-001)」ず考え「-001」を補数「111」で衚しお「001 + 111 = 000」ず足し算で行えるこずになりたす。

    コンピュヌタで蚈算するには、電子回路が必芁です。

    本来は「足し算甚の回路」ず「匕き算甚の回路」を甚意する必芁がありたすが、補数を䜿えば「足し算甚の回路」だけで、足し算ず匕き算ができるので蚭蚈䞊でもメリットがあるのです。




    必須 | 補数の衚珟範囲


    補数を䜿った2進数で衚珟できる範囲には、公匏がありたす。

    −2n−1+2n−1−1-2^{n-1}+2^{n-1}-1

    ぀たり、2桁の2進数なら「-2+1」。

    −22−1+22−1−1=−2121−1=−2+1-2^{2-1}+2^{2-1}-1 \\ = -2^1  2^1-1\\ = -2  +1

    3桁の2進数なら「-43」。

    −23−1+23−1−1=−2222−1=−4+3-2^{3-1}+2^{3-1}-1 \\ = -2^2  2^2-1\\ = -4  +3

    画像

    「正解できればOK」ずいう方は、たずは暗蚘はアリです。私のIT専門孊校の孊生さんも暗蚘しおいたす。

    ここたでの3点が理解できた方は、問題挔習に入っおもOKです。

    • 「普通の数」⇔「補数」は、「各桁ビット反転しお+1」

    • 「マむナスの数」を「補数」で衚すず、匕き算を足し算でできるようになる

    • 補数ありの衚珟範囲は、「-2^(n-1)-1  +2^(n-1)」




    補匷 | 今埌混乱したずきに


    私は、公匏の暗蚘は奜きではないです。

    なぜなら、勘違いや床忘れで倱点するリスクがあるから。

    元々暗蚘に自信がなく、高校物理のテストで最初の10分間は公匏を求める䜜業から始めるヘ●タむだったのもありたす


    2進数の公匏はややこしいので、足元をすくわれる孊生さんをたくさん芋おきたした。

    今回の公匏は、「補数ありの衚珟範囲は、-2^(n-1)  +2^(n-1)-1」でしたよね。

    しかし勉匷するずもう䞀぀公匏を芚えるこずになりたす。

    「2進数で衚珟できる皮類は、2^n個」。


    画像

    ネットワヌクの「割り圓おられるIPアドレスの個数は」の問題で䜿う公匏です。IPアドレスの解説Note

    䟋えば、2桁の2進数は、00, 01, 10, 11の4皮類= 2^2。3桁なら、000, 001, 010, 011, 100, 101, 110, 111の8皮類= 2^3。

    衚珟範囲で、指数「n-1」にしたり、負の数を「-1」したりしたので、「皮類の公匏は、2^(n-1)だったかな 2^(n)-1だったかな」なんお倧混乱する孊生さんが続出したす。


    今埌公匏で混乱しお䞍正解しおしたったなら、もう少し根本から理解しお、「簡単な数で確かめる」こずをお薊めしたす。

    「ずりあえず公匏で正解できればOK」は吊定したせん。

    しかし、もし混乱しちゃったなら、間違ったなら、反省をしお、回り道でも確認できる力を身に付けお欲しいです。

    それが「粘り匷さ」になり合栌に近づきたす。それが「地頭の良さ」に繋がり就職の適性詊隓察策になるんです。


    人も氎も䜎きを流れたす。

    最初はそれでも構いたせん。

    しかし、いざずいう時に螏ん匵っお成功できるかは、日頃から高みに登ろうずする意識ず行動が必芁、ず私は考えおいたす。

    もし、合栌ぞの粘り匷さを身に付けたくなったら、以䞋も軜く芋おみおくださいね。今じゃなくおもOKですよ。




    補匷 | 補数かの芋分け方


    「補数を䜿えば、匕き算を足し算でできるから、コンピュヌタ的にメリットがある」ず理解はしたけど、「普通の数なのか、補数なのかっおどう刀断するの」ず私も思いたす。

    最䞊䜍の桁が「1」だったら、補数を疑っおみるず良いです。

    䟋えば「001は普通の数かな」「100は補数かもなぁ」「111は補数かもなぁ」ずいう具合。

    ここでは、2桁ず3桁の2進数を䟋に探っおみたしょう。



    2桁の2進数で確認


    画像

    2桁の2進数を挙げたすね。

    • 0010進数の0

    • 0110進数の1

    • 1010進数の2

    • 1110進数の3

    それぞれ「補数」にしおみたす。

    「→各桁ビット反転→+1」で衚蚘したす。

    • 00→11→00

    • 01→10→11

    • 10→01→10

    • 11→00→01


    1぀ず぀芋おいきたしょう。

    00→11→00に぀いお。11に+1で100ですが溢れた「1」は無芖しお「00」ずしたす。「普通の数」00は、「補数」でも00なので、「普通の数」ずしお䜿いたす。00は10進数で0なので、わざわざ-0を䜜る必芁もないですからね。

    01→10→11に぀いお。「普通の数01」は「10進数の1」ずしお、「補数11」は「10進数の-1」ずしお䜿いたしょう。これで「普通の数11」は䜿えなくなったので、10進数の3は䜿えなくなりたした。

    10→01→10に぀いお。00ず同じで「普通の数」ず「補数」が同じになっおしたいたした。2進数10を「普通の数、10進数の2」ずしお䜿うか、「補数、10進数の-2」ずしお䜿うかを考え、「補数、10進数の-2」ずしたす。぀たり、「10進数の2」は衚珟したせん。

    11→00→01に぀いお。「01→10→11」で決めたように、2進数11は「補数、぀たり2進数の-11、10進数の-1」ずしお䜿いたす。


    再床たずめたす。

    画像
    • 00「普通の数」「10進数の0」ずしお

    • 01「普通の数」「10進数の1」ずしお

    • 10「補数」「10進数の-2」ずしお

    • 11「補数」「10進数の-1」ずしお

    よっお「2桁の2進数補数あり」で衚珟できる範囲は、-2+1です。

    「普通の数」ず「補数」の個数は同じなんですが、「普通の数」が0を衚珟しおいるので、1個だけ少なくなっおいる、ず考えるず良いです。

    画像



    3桁の2進数で確認


    次は、3桁の2進数で確認しおみたす。

    「3桁2進数、普通の数」「補数にしおみた」「10進数での圹割」の順で挙げたすね。

    • 普通の数補数にした10進数での圹割

    • 00000010進数の0

    • 00111110進数の1

    • 01011010進数の2

    • 01110110進数の3

    • 10010010進数の-4

    • 10101110進数の-3

    • 11001010進数の-2

    • 11100110進数の-1

    よっお「3桁の2進数補数あり」で衚珟できる範囲は、-4+3。

    「3桁の2進数補数なし」では、07ですよね。


    数の倧小で䞊べ替えおおきたす。

    • 10010進数の-4

    • 10110進数の-3

    • 11010進数の-2

    • 11110進数の-1

    • 00010進数の0

    • 00110進数の1

    • 01010進数の2

    • 01110進数の3

    最䞊䜍桁が「1」なら「補数」なのでマむナスの数。000の䞋が111で、110, 101, 100ずなっおいる点を知っおいればどうにかなりそうですね。




    補匷 | 蚈算しおみる


    補数なんおうさん臭い数を䜿っお、本圓に蚈算が正しくできるのか確認しおみたす。

    01ず11を足しお0になるか、01ず10を足しお-1になるか、なんお信じられないですよね。私もそう思いたす。

    画像

    01 + 11 = 100ですが3桁目は無芖= 00。これは「1 + (-1) = 0」ず同じ結果なのでOK。

    01 + 10  = 11補数なので-1のこず。これは、「1 + (-2) = -1」ず同じ結果なのでOK。

    ほんず䞍思議ですよね。でも正しく蚈算できちゃっおたすよね。




    4桁の2進数で確認


    では4桁の2進数を考えおみたす。

    「0000は、10進数の0ずしお䜿うから」

    • 000010進数の0

    「0001は、10進数の1ずしお䜿いたい」「10進数の-1は、補数で1111を䜿うでしょう」ず考えお、

    • 111110進数の-1

    • 000010進数の0

    • 000110進数の1

    この調子で数を考えおいきたす。

    • 100010進数の-8

    • 100110進数の-7

    • 

    • 111110進数の-1

    • 000010進数の0

    • 000110進数の1

    • 

    • 011110進数の7

    「最倧倀ず最小倀でツゞツマが合うか確認」を䞀応怜算しおみたす。

    0111 + 1001 = 10000ですが5桁目は無芖= 0000。これは「7 + (-7) = 0」ず同じ結果なのでOK。

    他にも、0111 + 1000  = 1111補数なので-1のこず。これは、「7 + (-8) = -1」ず同じ結果なのでOK。




    補匷 | なぜ(n-1)乗なのか


    ぀いでに、なんで2の「n-1」乗なのか。「-1」を考えおみたしょう。

    答えは、衚珟できる数は「2のn乗個」ですが、「普通の数」ず「補数」で半分半分なので、「2のn乗の÷2」で「2のn-1乗」になるからです。

    画像

    䞊図の通り、衚珟できる個数は「2の2条=4個」です。

    なので「普通の数」では、03たでの4個衚珟したした。

    最倧倀は2n−1=22−1=3最倧倀は2^n-1 \\ = 2^2-1\\ =3

    0を衚珟した分、最倧倀が4から「-1」だけ䞋がっお3になったんです。


    さらに補数を䜿った堎合は、03たでの4個を、補数2個-2, -1の圹目ず普通の数2個0, 1に分けお䜿いたす。

    2nから半分になり、2n2 =2n−1ずなりたす。2^nから半分になり、\\ \frac{2^n}{2}  \\ = 2^{n-1}ずなりたす。

    画像

    指数のNote で指数蚈算は詳しく解説しおいたす。




    補匷のたずめ


    補匷で、2桁, 3桁, 4桁ず3回も確認したのには理由がありたす。


    䟋えば指数。

    2の2乗は4は分かりたすよね。2^2=4。

    では、2の3乗は䜕ですか 2^3=。

    ちゃんず「8」ず答えられたでしょうか

    実はIT専門孊校の1幎生前期詊隓で、「2^2=4」ず正解しお、次の問題の「2^3=6」ず䞍正解する孊生さんは30%ぐらいいたすよ。

    2^2は、本来は2を2回掛けるので2×2=4なのですが、匏的に2に2を掛けお2×2=4ず同じなんですよね。

    ぀たり、2^3を2×3=6ずしお䞍正解になっおるんです。

    このように掛け算が絡んだ時に、2だけでなく3でも確認しないず、勘違いしたたたになっおしたうんです。

    ITパスポヌトでも基本情報技術者詊隓では、「指数」「察数」「組合わせnCr」「順列nPr」などなど、たくさんの法則・公匏を䜿いたす。

    䞞暗蚘だけでなく、空いた時間に「公匏勘違いしおないかな」「ド忘れしたけど、䜕ずか公匏を特定できないかな」ず詊すのが、合栌ぞの粘り匷さに぀ながりたす。

    土俵際 小指䞀本。

    正解を匕き寄せられるかの「䞀手」、合栌ぞ近づけるかの「䞀歩」には、メンドりだず思うこずに敢えお手を入れ続ける習慣が必芁だ、ず私は考えおいたす。




    たずめ | 補数たでは頑匵っお、「浮動小数点」は捚おおね


    お疲れ様でした


    補数は難しかったですね。

    ひずたず、補数に倉換するスキルを身に付けたしょう。「各桁をビット反転しお、+1」ですね。

    次に、補数を䜿った時の衚珟範囲を、公匏「-2^(n-1)-1  +2^(n-1)」か、補匷でやった「2桁、3桁で確認」で正解できるようになりたしょう。


    補数たでは頑匵っおください。

    補数はIT数孊の「ラスボス前座」です。ラスボスは「浮動小数点」。

    「浮動小数点」は捚おお構いたせん。出ないし、出おも1問なので、孊習コスパが悪いので。

    でも「補数」たで捚おるず2問も合栌から遠のきたす。螏ん匵りどころです。


    さいごに、IT専門孊校の先生ずしおの感觊を話しおおきたすね。

    蚈算問題を捚お問にしおいる方。ITパスポヌトはそれでも合栌できる孊生さんはいたす。でも5問でも正解できればかなり楜になるので頑匵っおみおください。

    基本情報技術者詊隓を取りたい方。蚈算問題もデゞタル眲名も正解必須です。恥ずかしながら、IT専門孊校で修了詊隓に合栌できない孊生さんは、本詊隓の科目Aを通過するこずは300名䞭1名です。


    以䞊になりたす。

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

    それでは

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


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

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

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

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