平成30年秋期  問2について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
さん  
(No.1)
平成30年秋期  問2の解説について

(手順1)
与えられたビット列Aを符号なしの2進数と見なし,Aから1を引き,結果をBとする。
  00101000-1=00100111
00100111をBとします。

00101000-1がどうして00100111になるのかわかりません。
どなたか計算式を教えていただけますでしょうか?
初歩的な質問で申し訳ございませんが、よろしくお願いいたします。
2024.02.12 13:44
タマルさん 
(No.2)
2進ですから下記は理解できますよね。
1 + 1 = 10
11 + 1 = 100
111 + 1 = 1000

だったら
100111 + 1 = 101000
ですから
100111 = 101000 - 1 です。
2024.02.12 15:43
にぱーさん 
(No.3)
自分なりの解釈で書きました。
分かりづらかったからごめんなさいね。

問題文中にあるビット列A(00101000)は10進数に直すと
40になります。

手順1  10進数の40から1を引くと40ー1=39になります。
        39を2進数で表すと00100111になります。これがBです。

手順2  AとBの排他的論理和を求め、結果をCとありますが

        A  00101000
        B  00100111
        ↑を排他的論理和で求めると

        Cは00001111になります。

手順3  AとCの〇〇〇を求め、結果をAとする。

AとCをどういった求め方をすれば、本文中にある00001000になるのかを
見つければ、あとはオッケーになります。

答えは、ウの論理積(AND)ですが、これが本文中にある00001000になるのかを
確かめます。


        A  00101000
        C  00001111
        ↑を論理積(AND)で求めると

            00001000になります。

2進数の計算と論理積や排他的論理和が分からないとこの問題は難しいと思います。
2024.02.12 16:07
ちょーさん 
(No.4)
タマルさんのご解説に便乗する形で恐れ入ります。
0010 1000と1の桁数を揃えると計算しやすいです。
見やすいよう4ビットずつ半角スペースで区切ります。

  0010 1000

  0000 0001
--------
=0010 0111

0111+0001=1000が理解できれば
下四桁の引き算は1000-0001=0111に気づきます。
上四桁はここまでに繰り下がりがなく0を引くだけなので
上四桁は0010のままです。

よって0010 1000-1=0010 0111になります。
2024.02.12 16:51
さん  
(No.5)
タマルさん、にぱーさん、ちょーさん

丁寧な解説ありがとうございます!
にぱーさんの手順1の前に10進数に直すという方法を見て、なるほど!と思いました。

自分は補数を使って計算するのかと思い、以下の計算をしたのですが、
この方法は間違っているでしょうか?

  00101000
―00000001



  00000001を反転



  11111110
+              1
-------------------
  11111111



  00101000
+11111111
-------------------
  00100111
2024.02.14 12:15
jjon-comさん 
FE ゴールドマイスター
(No.6)
> 手順1の前に10進数に直す
とか
> 補数を使って計算するのかと思い
とか
を持ち出す方が話がややこしくなると思うのですけれど。

次の「10進数の引き算」はお分かりになりますか?
654321 ー 1 = 654320

543210 ー 1 = 543209

432100 ー 1 = 432099

321000 ー 1 = 320999

210000 ー 1 = 209999

100000 ー 1 = 099999

上記において注目する箇所を[]で囲みます。
[]で囲んだ箇所以外は ー1減算によって変化しないので任意の10進数字(X)としました。
XXXXX[1] ー 1 = XXXXX[0]

XXXX[10] ー 1 = XXXX[09]

XXX[100] ー 1 = XXX[099]

XX[1000] ー 1 = XX[0999]

X[10000] ー 1 = X[09999]

[100000] ー 1 = [099999]

上記が分かっているならば。

「9」という数字は存在せず,
「0」と「1」という数字しかない2進数において
ー1減算は次のようになることがイメージできるのではないですか。
(Xは任意の2進数字(0または1)です)
XXXXX[1] ー 1 = XXXXX[0]

XXXX[10] ー 1 = XXXX[01]

XXX[100] ー 1 = XXX[011]

XX[1000] ー 1 = XX[0111]

X[10000] ー 1 = X[01111]

[100000] ー 1 = [011111]
2024.02.14 13:49
さん  
(No.7)
jjon-comさん

丁寧な解説ありがとうございます!
今やっと自分が難しく考えすぎていることに気付きました…。
2進数と見ただけで身構えてしまうので、問題をたくさん解いて慣れていこうと思います。

皆様、初歩的なことにも関わらず解説していただき本当にありがとございました。
2024.02.14 19:00

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop