アプリ版:「スタンプのみでお礼する」機能のリリースについて

基本情報技術者試験の勉強をしている初学者です。
参考書を見ながら勉強をしているのですが、解説を見ても分からない問題がありますので分かり易く解説していただけないでしょうか。

問  ある整数値を、負数を2の補数で表現する2進表記法で表すと最下位2ビットは11であった。
  10進表記法の下で、その整数値を4で割ったときの余りに関する記述として、適切なものはどれ                       
  か。ここで、除算の商は、絶対値の小数点以下を切り捨てるものとする。

ア その整数値が正ならば3  イ その整数値が負ならば−3
ウ その整数値が負ならば3  エ その整数値の正負にかかわらず0

A 回答 (2件)

「2の補数」とは、相互に足し合わせると「桁あふれ + 0」になる数のことです。



つまり「4ビットの数」たとえば「0101」があるときに
 0101 + 1011 = 1 0000
になるので、右辺の「最上ビット(5ビット目)」が「桁あふれ」で消えるとすれば
 0101 + 1011 = 0000
ということになって、「たし合わせると 0 になる数」なので
「0101 の絶対値が同じ負の数は 1011」
ということになります。
それが「2の補数」です。
このためには、「すべての数を4ビットで表わす」(5ビット目は無視する)という「固定ビット数」の表記であることが条件です。

たとえば「4ビット」なら
・正数:0000~0111(10進数で 0~7)
・負数:1111~1000(10進数で -1~-8)
ということになります。
このように、再上位ビットが「0」なら正数を、「1」なら負数を表わすことになり、実質的に「最上位ビットが符号を表す」ことになります。ただし、負数の場合には残りビットをそのまま読んでも「絶対値」にはならないので要注意です。(あくまで「足して 0 になる」という数ですので)

「2の補数」の作り方は

・元の数:0101
 ↓
・0 と 1 とを逆転させる
 → 1010
 (これを「1の補数」と呼ぶことがある)
 ↓
・それに「1」を加える
 → 1011

で出来上がり。
元の数に「1の補数」を加えると
 0101 + 1010 = 1111
になるので、これに「1」を加えれば
 1111 + 0001 = 1 0000
になるからです。

この「2の補数の作り方」は「正数→負数」を作るときだけではなく、「負数→整数」を作るときも全く同じです。
試しにやってみてください。


これを理解した上で、問題に当たれば

>最下位2ビットは11であった。

これは、上のような「4ビット」の数の場合だと
 **11
ということです。

これが「正数」であれば、「**11」が絶対値ですから、4で割ったときの余りは
 0011
になります。つまり、10進数で「3」。

これが「負数」であれば、絶対値は「**11」から「2の補数」を作って 

・元の数:**11
 ↓
・0 と 1 とを逆転させる
 → **00
 ↓
・それに「1」を加える
 → **01

これを4で割ったときの余りは
 0001
なのですが、負数を割ったときでも余りは「必ず正数」なので、「絶対値を割ったときの余りが1」なら、その負数を割ったときの余りは
 4 - 1 = 3
ということになります。

たとえば、10進数だと
 -13 ÷ 4 = -4 余り 3
になりますね。
絶対値だと 
 13 ÷ 4 = 3 余り 1
となります。

つまり、余りは10進数で「3」。

ということで、元の数が正でも負でも余りが「3」なので、選択肢では
「アとウ」
ということになります。

選択肢2つを選んでよいのかどうかわからないが、ここではそういうことになる。


「2の補数で、負数を表記する」というのは、今後も何度も出て来ると思いますので、きちんと理解しておいた方がよいと思います。
実際のコンピュータで大きな桁数でデータを扱う場合でも、負数を「2の補数」で表します。これは、コンピュータでも、「最上位の桁数の1つ上に桁あふれすると、そのビットは消えてしまう」ということを利用しているからです。
なんか、あふれたビットがどっかに消えちゃうという「いい加減なごまかし」をしているみたいですけどね。
    • good
    • 0
この回答へのお礼

非常に分かりやかったです。
教本とかは、途中の過程があまり詳しく載っておらず、分からなかったので非常に助かりました。

お礼日時:2021/07/12 14:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!