平成25年秋期試験午前問題 問2
あさん
(No.1)
ABCDは32ビットのレジスタに入っているのに2進数に直したとき
00001010 00001011 00001100 00001101
にならないのはなぜですか?
00001010 00001011 00001100 00001101
にならないのはなぜですか?
2020.06.14 01:14
メタルさん
★FE ブロンズマイスター
(No.2)
?
そのビットの並びで間違ってません。
もう一度問題文と解説を読んでみてください。
そのビットの並びで間違ってません。
もう一度問題文と解説を読んでみてください。
2020.06.14 01:37
あさん
(No.3)
解説には
結果は 0010 1010 1111 0011
であると買いてありますが、私は32ビットになると思うのですがなぜ16ビットなのでしょうか?
結果は 0010 1010 1111 0011
であると買いてありますが、私は32ビットになると思うのですがなぜ16ビットなのでしょうか?
2020.06.14 07:28
おわ!さん
(No.4)
この投稿は投稿者により削除されました。(2020.06.15 00:43)
2020.06.15 00:43
メタルさん
★FE ブロンズマイスター
(No.5)
ごめんなさい。
嘘言いました。
嘘言いました。
2020.06.14 10:07
メタルさん
★FE ブロンズマイスター
(No.6)
これは数値表現ですが、
数字のゾーン十進数とごっちゃになるとこうなりますね。
数字のゾーン十進数とごっちゃになるとこうなりますね。
2020.06.14 10:11
助け人さん
★FE ゴールドマイスター
(No.7)
横から失礼します。
この問題を早く解く方法があります。2ビットだけ右に論理シフトということは、4で割ればいいです。
16進数ABCDを16進数4で割れば、最初に「2」が立つので、あっという間にアと分かります。
この問題を早く解く方法があります。2ビットだけ右に論理シフトということは、4で割ればいいです。
16進数ABCDを16進数4で割れば、最初に「2」が立つので、あっという間にアと分かります。
2020.06.14 19:10
おわ!さん
(No.8)
助け人さん、ありがとうございます。
16進数ABCDを16進数4で割る方法で解き直してみました。
以下、16進数ABCDをOx(ABCD)と記載致します。
Ox(ABCD)の各桁は
A→2×4+2
B→2×4+3
C→3×4+0
D→3×4+1
となるので、
Ox(ABCD)/4=Ox(2233)+{Ox(2301)/4}
で表せる。上式の右辺第二項は
Ox(2301)/4=Ox(8C04)/16
と変形でき、
Ox(8C04)を右に1文字ずらして先頭1文字を0で穴埋めした
Ox(08C0)になるので、
Ox(ABCD)/4=Ox(2233)+Ox(08C0)=Ox(2AF3)になる。
以上、脱線していたら申し訳ありません。
16進数ABCDを16進数4で割る方法で解き直してみました。
以下、16進数ABCDをOx(ABCD)と記載致します。
Ox(ABCD)の各桁は
A→2×4+2
B→2×4+3
C→3×4+0
D→3×4+1
となるので、
Ox(ABCD)/4=Ox(2233)+{Ox(2301)/4}
で表せる。上式の右辺第二項は
Ox(2301)/4=Ox(8C04)/16
と変形でき、
Ox(8C04)を右に1文字ずらして先頭1文字を0で穴埋めした
Ox(08C0)になるので、
Ox(ABCD)/4=Ox(2233)+Ox(08C0)=Ox(2AF3)になる。
以上、脱線していたら申し訳ありません。
2020.06.14 23:12
助け人さん
★FE ゴールドマイスター
(No.9)
おわ!さん
びっくりするような発想ですね。
私は、筆算でやってみました。
_2AF3
4)ABCD
8
2B
28
3C
3C
0D
0C
1
つまり、ABCD÷4=2AF3 余り1 ・・・ 全て16進数
しかし、最後までやると計算ミスしそうなので、この四択なら、最初に「2」が立ったら、終了です。
びっくりするような発想ですね。
私は、筆算でやってみました。
_2AF3
4)ABCD
8
2B
28
3C
3C
0D
0C
1
つまり、ABCD÷4=2AF3 余り1 ・・・ 全て16進数
しかし、最後までやると計算ミスしそうなので、この四択なら、最初に「2」が立ったら、終了です。
2020.06.15 00:39
おわ!さん
(No.10)
助け人さん
筆算のご解説ありがとうございます。
理解できました。
確かに、最後までやると計算ミスしそうです。
「この四択なら、最初に「2」が立ったら、終了です。」
はとても実践的だと思いました。
筆算のご解説ありがとうございます。
理解できました。
確かに、最後までやると計算ミスしそうです。
「この四択なら、最初に「2」が立ったら、終了です。」
はとても実践的だと思いました。
2020.06.15 01:10
おわ!さん
(No.11)
No.4の投稿ですが、後半にビットの誤記があり、削除致しました。
訂正内容を再投稿致します。
16進数ABCDを32ビットレジスタに入れたときの格納値は
「0000 0000 0000 0000 1010 1011 1100 1101」
になります。
前半16ビットは全て0ですので、
右に2ビット論理シフトしても、前半16ビットは0で変わりません。
そのため、解説のように、後半16ビットの
「1010 1011 1100 1101」を右に2ビットだけ論理シフトした、
「0010 1010 1111 0011」を16進数に変換して、
正解の「2AF3」を導いてよいと思います。
32ビットで考えないと気持ち悪い場合は、以下のように解きます。
16進数4文字は16ビットで表現できます。
32ビットレジスタに格納する場合は、
前半16ビットを「0」で穴埋めし、
後半16ビットに16進数4文字のビット列を格納します。
16進数4文字「ABCD」を32ビットレジスタに格納する場合は、
16進数8文字「0000ABCD」(先頭4文字を「0」で穴埋め)を、
2進数32文字のビット列にした
「0000 0000 0000 0000 1010 1011 1100 1101」
で格納します。
これを右に2ビットだけ論理シフトすると、
「0000 0000 0000 0000 0010 1010 1111 0011」
となり、16進数では「00002AF3」になります。
解答群の16進数はすべて4文字(16ビット)なので、
正解は先頭4文字の「0」を省略した「2AF3」になります。
訂正内容を再投稿致します。
16進数ABCDを32ビットレジスタに入れたときの格納値は
「0000 0000 0000 0000 1010 1011 1100 1101」
になります。
前半16ビットは全て0ですので、
右に2ビット論理シフトしても、前半16ビットは0で変わりません。
そのため、解説のように、後半16ビットの
「1010 1011 1100 1101」を右に2ビットだけ論理シフトした、
「0010 1010 1111 0011」を16進数に変換して、
正解の「2AF3」を導いてよいと思います。
32ビットで考えないと気持ち悪い場合は、以下のように解きます。
16進数4文字は16ビットで表現できます。
32ビットレジスタに格納する場合は、
前半16ビットを「0」で穴埋めし、
後半16ビットに16進数4文字のビット列を格納します。
16進数4文字「ABCD」を32ビットレジスタに格納する場合は、
16進数8文字「0000ABCD」(先頭4文字を「0」で穴埋め)を、
2進数32文字のビット列にした
「0000 0000 0000 0000 1010 1011 1100 1101」
で格納します。
これを右に2ビットだけ論理シフトすると、
「0000 0000 0000 0000 0010 1010 1111 0011」
となり、16進数では「00002AF3」になります。
解答群の16進数はすべて4文字(16ビット)なので、
正解は先頭4文字の「0」を省略した「2AF3」になります。
2020.06.15 01:17
おわ!さん
(No.12)
16進数の接頭辞は「Ox」ではなく、「0x」でした。
2進数:0b
8進数:0o
10進数:0d
16進数:0x
8進数の接頭辞はC言語では「0」だけ、Pythonでは「0o」のようです。
2進数:0b
8進数:0o
10進数:0d
16進数:0x
8進数の接頭辞はC言語では「0」だけ、Pythonでは「0o」のようです。
2020.06.20 07:21
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告