HOME»基本情報技術者試験掲示板»基本情報  平成28年秋問1の解説がわかりません
投稿する

基本情報  平成28年秋問1の解説がわかりません [5457]

 新卒さん(No.1) 
今更ではあるんですけど過去問を解いているうちにわからなくなったので質問です。
基本情報  平成28年秋問1なのですが

なぜ答えを求めるために1010  1010を使うのでしょうか?
回答のために逆算して数値を用いているように思えてなりません。

また解説内では数字は何を用いても良いとありますが試しに0000 0000や1111 1111を用いて解説通りに行おうとすると解が定まりません。

私のやり方が合っているのかもわからず問題、解説に納得がいきません。
上記理由を教えていただきたいです。
ご存じの方がいらっしゃいましたらご教授いただきたいです。
2024.05.20 10:00
最近勉強はじめましたさん(No.2) 
あなたが何を分かっていないのか、あなたのやり方をご説明いただかないとなんとも言えません。
10101010を用いるのは解説にもあるようにビットの変化がわかりやすいからです。
個人的には10100110とかのほうがいいかとも思いますが。

解説をなぞりますが、10100110と0F(16)→00001111(2)とを
XOR、NAND、AND、ORをとったときに、下位ビットが変化しないもの
(0110→0110のまま)はどれかという問題です。
それぞれ、1001、1001、0110、1111(下位ビットのみ)となるので、
変化していないのはAND(論理積)となる。  ということです。
2024.05.20 10:24
jjon-comさん(No.3) 
FE ゴールドマイスター
1111 1111 を用いた場合は ウとエ ともに「下位4ビットが変化しない」ので
この1例だけでは選択肢を1つに絞ることはできませんが,
0000 0000 を用いた場合は「下位4ビットが変化しない」のは ウ だけです。
2024.05.20 14:27
 新卒さん(No.4) 
ご反応いただきありがとうございます。
不明点でいえば大きく2点になるかと思います。

一つ目は「1010 1010」がビットの変化がわかりやすい理由ですが、これは解説を見れば変化がわかりやすいというのは理解ができます。
では例えば16進表記の「0F」以外の数値に対しても「1010 1010」を使って判定を行うなどのように、わかりやすい表現をするうえでの常識なのでしょうか?


二つ目の理由に繋がりますが、「1010 1010」を使って検証を行う理由がわかりませんでしたので、解説を読む前に私は仮の値として「0000 0000」で計算を行った場合と、うまくいきませんでしたので「1111 1111」の場合とで計算を行いました。
「1111 1111」の際にはウとエの場合に、下位4ビットが「1111」と変化しない値になり
「0000 0000」の際にはアの時点で下位4ビットが「1111」となってしまいました。
これは仮のビット数の設定自体が間違っているのでしょうか、論理演算が間違っているのでしょうか。

散文で申し訳ございませんが、こういった事情になります。
よろしくお願いいたします。
2024.05.20 15:09
y4 kさん(No.5) 
FE ブロンズマイスター
一つ目・二つ目

設題から16進数0Fと4種類の操作が示されています。
16進数0F=2進数0000 1111  下位4ビットは全て1です。

ここから0と1、1と1のいずれでも、常に元の値が得られる操作を選ぶ問題です。
2024.05.20 15:42
jjon-comさん(No.6) 
FE ゴールドマイスター
基本情報 平成28年 秋期 午前 問1
https://www.fe-siken.com/kakomon/28_aki/q1.html

> 「0000 0000」の際にはアの時点で下位4ビットが「1111」となってしまいました。

元データの下位4ビット「0000」が,アの論理演算により「1111」となったのですから,
アは「下位4ビットが変化しない」演算ではない,
すなわち,この問題の正解ではないことが分かったわけです。

> 例えば16進表記の「0F」以外の数値に対しても「1010 1010」を使って
> 判定を行うなどのように、わかりやすい表現をするうえでの常識なのでしょうか?

16進数表記「0F」=「0000 1111」というマスクビットとの論理演算の結果を検討したいわけですから,
・前半のマスクビット「0000」との演算対象となる元データの例は,
  0000(全部0)や1111(全部1)ではなく,0と1がともに含まれているデータ例の方が望ましい。
・後半のマスクビット「1111」との演算対象となる元データの例は,
  0000(全部0)や1111(全部1)ではなく,0と1がともに含まれているデータ例の方が望ましい。
というのは「わかりやすい表現をするうえでの常識」と言ってもいいように思います。

このサイトの解説で用いられている例「1010 1010」はこれに該当しますし,
No.2で述べられていた
> 個人的には10100110とかのほうがいいかとも思います
もこれに該当します。
2024.05.20 15:55
jjon-comさん(No.7) 
FE ゴールドマイスター
No.4 の
> 「1111 1111」の際には(略)
> 「0000 0000」の際には(略)
は,仮のビットの設定も,論理演算も,ともに正しいです。

> 「1111 1111」の際にはウとエの場合に、下位4ビットが「1111」と変化しない値になり
については No.3 で回答済。
2024.05.20 16:16
最近勉強はじめましたさん(No.8) 
一つ目についてはNo.6さんの説明でご理解できるかと思います。

二つ目については
> これは仮のビット数の設定自体が間違っているのでしょうか、
> 論理演算が間違っているのでしょうか。
論理演算は間違えていません。仮のビット数の設定が、間違っているというよりは問題にそぐわないといえるでしょう。
00000000や11111111は同じビットが並ぶ特殊な数値であり、この問題の解を一意に定めない特殊な数値です。

> なぜ答えを求めるために1010  1010を使うのでしょうか?
> 回答のために逆算して数値を用いているように思えてなりません。

これは間違いです。1010 1010 でも1000 1101でもなんでもいいのです。

> 例えば16進表記の「0F」以外の数値に対しても「1010 1010」を使って
> 判定を行うなどのように、わかりやすい表現をするうえでの常識なのでしょうか?

別に「1010 1010」が常識というよりは、「0000 0000や1111 1111を避ける」のが常識といえると思います。なぜならば、それらは違うビットを含まない特殊な数値だからです。
この問題のようにビットの変化を見る場合、0000 0000や1111 1111では同じビットの変化しか見れません。違うビットを含む場合の変化が見れません。ですので、0010とか1001とか違うビットを含む数値で検証します。[わかりやすい表現]等というよりは、0と1が両方含まれていることが重要なのです。

そのうえで、0と1が両方含まれている8ビットなら、1010 1010が
ぱっと思いつきやすい数値である、ということで回答に選ばれたのではないでしょうか。
2024.05.21 18:41
サブネットマスクさん(No.9) 
解説文に「ここでは演算対象となる8ビットのビット列に『仮の』値として10101010を使用し(略)」とありますよね。ただ、それだけのことです。わかりやすく説明しようとして、却って見辛くなっている、ややこしくなっているだけです。

私も、この手の問題は10101010よりもすべてゼロあるいはすべてイチの二値で解きますね(ちょっと自信ないときは00110011なんかも使いますが)。

で、すべてイチとすべてゼロの論理積の結果は次の通りです。

00000000
00001111 (AND
00000000 結果

11111111
00001111 (AND
00001111 結果

結果はいずれも下位の4ビットが変化しない(取り出せている)ことがわかります。
結果が変わったということですか、論理積、論理和、排他的論理和などなどをきちんと理解されていないだけです。
2024.05.22 06:06
 新卒さん(No.10) 
>別に「1010 1010」が常識というよりは、「0000 0000や1111 1111を避ける」のが常識といえると思います。なぜならば、それらは違うビットを含まない特殊な数値だからです。

0000 0000や1111 1111は逆に特殊な数値だったのですね。

皆様コメントを寄せて下さりありがとうございました。
参考書や解説だけでは理解できませんでしたので、本当に助かりました。
2024.05.23 11:25
boyonboyonさん(No.11) 
FE シルバーマイスター
こちらのスレッドに下記の投稿をしようとすると、403 Forbidden エラーが出てしまい投稿できなかったのですが、一部表現を変えたらできると伺ったので、再投稿させていただきます。

スレ主様、時間がたってしまい申し訳ありませんが、せっかく書いたので投稿させていただきます。

(投稿本文 5/21 に投稿しようとしたものです)

>なぜ答えを求めるために1010 1010を使うのでしょうか?
これは、0と1両方を調べたいからです。

0Fの下位4ビットは、1111
これと演算して変化しない演算を選びます。
全部1なので求める演算を ? とすれば、

調べたいビット ? 1 = 調べたいビットと同じ

を調べれば十分です。調べたいビットは、0 or 1 なので

1 ? 1 = 1
0 ? 1 = 0

になるような演算を選びます。これは選択肢の中ではウの論理積になります。
2024.05.27 21:37

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop