HOME»基本情報技術者試験掲示板»平成19年秋期試験午前問題  問3
投稿する

[2286] 平成19年秋期試験午前問題  問3

 さん(No.1) 
負の整数を表現する方法としてbとcはわかるのですが、1の補数を使ってなぜ負の数を表せるのでしょうか?

1の補数はその桁の最大値を求めるときにいくつ足せば良いかですよね?
例えば1101の1の補数は0010だと思いますが、これがどうして-2になるのでしょうか?

2020.05.01 11:50
 さん(No.2) 
すみません勘違いしてました。
0010が2であることから、1101が-2になるのですね。
ですが何故そうなるのかが分からないままです。
2020.05.01 11:56
guestさん(No.3) 
FE ブロンズマイスター
そもそもなのですが、
「4ビットのパターン1101を」1の補数「の方法で表現したものと解釈したとき」を考えるのですよね?(by問題文
> 1の補数を使ってなぜ負の数を表せるのでしょうか?
というよりは、1の補数を使って負の数を表すことにするとしたら?と聞いているのだと思います。
//*****************************
0000(0)
0001(1)―――→1110(-1)
0010(2)―――→1101(-2)
0011(3)―――→1100(-3)


0111(7)―――→1000(-7)
//******************************
こういうことですね。
2020.05.01 12:15
guestさん(No.4) 
FE ブロンズマイスター
この投稿は投稿者により削除されました。(2020.05.01 12:31)
2020.05.01 12:31
 さん(No.5) 
回答ありがとうございます
1110を-1と表現する根拠はなんなのでしょうか?

例えば2の補数では、
1110に0010を足せば10000となって先頭を切り捨てれば0になるから0010は-14であるとわかるのですが、1の補数では何を根拠に負の数を表現しているのでしょうか?
2020.05.01 12:39
guestさん(No.6) 
FE ブロンズマイスター
> 例えば2の補数では、
> 1110に0010を足せば10000となって先頭を切り捨てれば0になるから0010は-14

●「1110」の2の補数は「0010」
は正しいです。2の補数の定義に従えばそうです。
●0010は-14
はビミョーです。それだと普通の+2はどう表現するのか?となるからです。
ちなみに負数の表現に2の補数を導入したければ、何ビットで表現するかから決めなければなりません。
【5ビットで-14】
01110  →反転→  10001  →1足す→  【10010】……(A)
【6ビットで-14】
001110  →反転→  110001  →1足す→  【110010】……(B)
(A)と(B)で同じ-14でも違う表現になりましたね。
2020.05.01 13:43
guestさん(No.7) 
FE ブロンズマイスター
> 1の補数では何を根拠に負の数を表現しているのでしょうか?

これについては今回の問題の、より詳細な解説というよりは
1の補数がそもそも負数表現として適切なのか?という疑問でしょうか。

たしかに、2の補数のように、
//***2の補数*****************
計算機目線:1110+1101=1011(先頭切り捨て済)
人間様目線:-2+(-3)=-5
//***1の補数*****************
計算機目線:1101+1100=1001??(先頭切り捨て済)
人間様目線:-2+(-3)=-5
//****************************
筆算みたいなことはできません。
1の補数を計算機に採用するなら、もう少し工夫がいることにはなるでしょう。

※ただし、私はこの手の実務経験者ではないので、計算機製造会社ではどうしているだのといったことはわかりません。
2020.05.01 14:15
guestさん(No.8) 
FE ブロンズマイスター
――No.3、No.6に付け足し――
4ビットなら+7~-7(2の補数なら-8)
5ビットなら+15~-15(2の補数なら-16)
6ビットなら+31~-31(2の補数なら-32)
までの数を扱うことにすることで、1の補数でも2の補数でも、事実上、負数は先頭ビットが1になるように割り当てることができます。
4ビット・1の補数
0001~0111→+1~+7
1110~1000→-1~-7(1111は多分該当なし。-0かも?)
4ビット・2の補数
1111~1001→-1~-7(1000には-8を割り当て)
2020.05.01 14:44
guestさん(No.9) 
FE ブロンズマイスター
―No.7に付け足し―
あ、1の補数は、ビット反転ですよ?
詳細はwik〇pediaにでも任せますが。。。

1の補数に1足せば2の補数になる。
2の補数はX+(-X)=Xより1ビット多い10…0になる
1の補数はX+(-X)=Xより1ビット多い01…1になる
(※つまりXと同じビット数の1…1になる↑)

1の補数について
0101
????(+
―――――
1111
を考えると、[????]=1010

//*****************************
0101(5)―――→1010(-5)
//*****************************
2020.05.01 15:07
QMさん(No.10) 
FE ゴールドマイスター
決められたルールに従って解釈して、値の対応に混乱が起きなければ、表せてはいるわけです。
あとはそれが使いやすいルールかどうか。

1の補数なら、まるっと反転するだけでいい、というのが利点ですかね。
演算には向きませんが、少ない手数で値の認識はしやすいかと。
2020.05.01 15:20
 さん(No.11) 
1101は13を表すため、1の補数である0010は-13を表すということですよね?

しかし0010を基準に考えると0010は2を表し、1の補数である1101は-2を表すと思うのですが、同じ数列でも何を基準に考えるかによって表す数が変わるのは使い勝手が悪くないですか?
2020.05.01 15:32
 さん(No.12) 
4ビットなら+7~-7を表せるとのことですが、1の補数や2の補数を使う場合4桁では例えば+13などは表せないということですか?

私が知らないだけで何かそういう決まりでもあるのでしょうか?
2020.05.01 15:40
ながおさん(No.13) 
4ビットで可能なビットの組み合わせは16通りです。
そもそもその4ビットの値をマイナスを意味する絶対値であると仮定するのであれば、
-13もその決まりのなかでは可能な表現だと思います。
その方法が一般的かと言われたらどうかと思いますが…
2020.05.01 15:50
QMさん(No.14) 
FE ゴールドマイスター
> 1101は13を表すため、1の補数である0010は-13を表すということですよね?

一般的な符号付き(この範囲内で負の数も表す)ルールでは、最上位は符号ビットで、まずここを見て0なら正の数、1なら負の数と判定します。
それから値を求めます。
正の数ならそのまま解釈、負の数なら決められたルールで解釈。

1101を13と見るなら、最上位ビットも数値の一部と見ているので、符号なし整数の扱いっぽいですね。
つまり負の数を表すことは想定していないルールです。

No.13でも書かれているとおり、「4ビット」は「16種類を表現できる」という意味です。
その16種類を、0~15にするのか-8~+7にするのか、はたまた-4~+11なんて割り当てをするのか、それはルールの決め方次第。
どんなルールを使っているかが示されることで、そのビットパターンが何の数を表しているかが決まります。
2020.05.01 19:30
guestさん(No.15) 
FE ブロンズマイスター
4桁で1の補数や2の補数を使う場合について、範囲の定め方に絶対の決まりがあるのかといわれると、自信はありませんが。。。
決まりはあるといってもよいくらいにNo.8が一般的ではあると思います。

また、他の方がおっしゃっているよう、
4…0100
:
0…0000
-1…1111
:
-11…0101(1011の反転+1)
も私はアリとおもいます。

一方で過去に、ITパスポートではH24春AM_Q52のような出題があります。
まあ参考までに。。。
2020.05.01 21:41
 さん(No.16) 
反応が遅くなり申し訳ありません

1の補数で-8~7を表せるとのことですが、-8はどのように表すのでしょうか?
1111が余っていますが、0000である0を反転しているので-0になると思うのですが、ここに特例として-8を当てはめるのでしょうか?
2020.05.07 14:50
助け人さん(No.17) 
FE ゴールドマイスター
横から失礼します。

1の補数で-8~7を表せるとのことですが  ←  2の補数で-8~7を表します。1の補数では-8を表せません。

以下は、4ビットで表す2の補数(-8~7)と1の補数(-7~7)と10進数の関係です。厳しい言い方ですが、この程度は大抵の教材に出ていると思いますので、知っておかないと。

10進数  2の補数  1の補数
-8      1000      (表せない)  
-7      1001      1000
-6      1010      1001
-5      1011      1010
-4      1100      1011
-3      1101      1100
-2      1110      1101
-1      1111      1110
-0      -        1111
 0      0000      0000
 1      0001      0001
 2      0010      0010
 3      0011      0011
 4      0100      0100
 5      0101      0101
 6      0110      0110
 7      0111      0111
2020.05.07 19:12

返信投稿用フォーム

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

Pagetop