平成30年秋期 問2について
鳩さん
(No.1)
平成30年秋期 問2の解説について
(手順1)
与えられたビット列Aを符号なしの2進数と見なし,Aから1を引き,結果をBとする。
00101000-1=00100111
00100111をBとします。
00101000-1がどうして00100111になるのかわかりません。
どなたか計算式を教えていただけますでしょうか?
初歩的な質問で申し訳ございませんが、よろしくお願いいたします。
(手順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 です。
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進数の計算と論理積や排他的論理和が分からないとこの問題は難しいと思います。
分かりづらかったからごめんなさいね。
問題文中にあるビット列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になります。
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
丁寧な解説ありがとうございます!
にぱーさんの手順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
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]
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]
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進数と見ただけで身構えてしまうので、問題をたくさん解いて慣れていこうと思います。
皆様、初歩的なことにも関わらず解説していただき本当にありがとございました。
丁寧な解説ありがとうございます!
今やっと自分が難しく考えすぎていることに気付きました…。
2進数と見ただけで身構えてしまうので、問題をたくさん解いて慣れていこうと思います。
皆様、初歩的なことにも関わらず解説していただき本当にありがとございました。
2024.02.14 19:00
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告