- ベストアンサー
補数について質問
- Javaの参考書に掲載されている補数についての問題に関する質問です。
- 質問1では、0の補数が存在するのかについての疑問を持っています。
- 質問2では、補数15のある数Aについて尋ねています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1で紹介された ja.wikipedia「補数」の「定義」より抜粋。 ---------------- b進法において、自然数aを表現するのに必要な最小の桁数をnとしたとき、 bのn乗 -a を「b進法におけるaに対する基数の補数(bの補数)」 という。 定義したように考えると、aの基数の補数とaとを足すと、桁数が1つ増える最小の自然数(=bのn乗)となる。 基数bが文脈上明らかなときには、「b進法における」という表現はしばしば省略される。 ---------------- つまりaが同じでも,bが異なれば補数は異なるし,nが異なれば補数は異なる。 よって。 回答2: A=15だとしても,その10進数の補数と2進数の補数は異なる。また,2桁の10進数の補数と3桁の10進数の補数は異なる。さらに,8桁の2進数の補数と16桁の2進数の補数は異なる。前提条件が不明確で解答できません。 回答4: 質問者のおっしゃっているとおりなら出題がおかしいです。 そもそもの問題文「次の10進数の補数を8桁の2進数で求めなさい」という表現も,経験を積めば「8桁の2の補数を求めているのだろう」とすぐ分かりますが,初心者が「まず10の補数を求めるのだろうか?」と誤読しやすい迂闊な表現であると言えます。注意深い出題者であるなら「次の10進数の2の補数を…」と表記したはずです。 回答3: ANo.1を参照。例を挙げるなら,例えば Java言語において 10進数の-15という数値が,byte, char, short, int, long などの基本データ型の変数においてどういうビットパターンで格納されているかを理解するためには,2の補数の知識が必要です。 回答1: ANo.1を参照。補数という発想においては桁数nが決まっていることを前提としているため,0の補数を求める過程でn桁を越えた部分を無視すると,0に戻るわけです。
その他の回答 (2)
- salsberry
- ベストアンサー率69% (495/711)
> 僕が読解を間違えたのでしょうか? 「次の10進数の補数を8桁の2進数で求めなさい」という問いは参考書に書いてあったとおりですか? それだけを読むと確かに意味が曖昧です。 しかし、その参考書には補数についての解説も載っているのでしょうから、その文脈によっては一意に決まるのかもしれません。たとえば、 (a)「補数」として2進数の「2の補数」のことしか説明していない場合 (b)さまざまな補数があることを説明した上で、「以下、単に『補数』と書いた場合には2進数の『2の補数』のことを意味する」というような注意書きがある場合 です。これらの場合は、質問者さんが問いを誤読したと言えるでしょう。 > 10進数の補数を2進数に変換し、さらにその変換した2進数を補数にしたものが答えとなっています。 本当ですか? 10進数の場合は10の補数を、2進数の場合は2の補数を使うとしてAについてその計算をすると 15(10進) → 10の補数 85(10進) → 2進数に 01010101(2進) → 2の補数 10101011(2進) ですが、参考書にはAの答として10101011が載っているのでしょうか? 質問文にある情報から私が一番可能性が高いと思う解釈だと、 15(10進) → 2進数に 00001111(2進) → 2の補数 11110001(2進) となって、11110001が答になります。
お礼
丁寧なご回答ありがとうございます^^ >(a)「補数」として2進数の「2の補数」のことしか説明していない場合 たしかに2進数の2の補数のことしか説明されてなかった! 僕が誤読してました
- kmee
- ベストアンサー率55% (1857/3366)
その参考書に、補数の説明なかったですか? コンピュータの分野で「補数」というと、「2の補数」を指すことが多いです。実際に整数型の負の表現としてよく使われています。 Javaの参考書の問題なら、おそらく「2の補数」だと思うのですが。10進→2進の変換や、負の値の内部表現を理解するのが問題の目的ではないでしょうか。 以下、「2の補数」として答えると。 回答1: http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0 にある定義から、8桁の2進数においての「基数の補数」は、b=2,n=8となるので 2^8 - a = 256 - a = 0x100 -a です。よって、Bの補数はa=Bとなるので 0x100 - B = 0x100 -0 = 0x100 になります。8桁の2進数なので、9桁以上は溢れてしまうので 0x100→0x00 = 0 です。 ちなみに、10進でも「2桁の10進数」と考えれば、同様に100(10^2)→0です。 回答2: 計算しなおしてください。 回答3: 整数の内部表現を理解するのが目的だと思われます。 回答4: Cの解答が0b11111111(0xff)になっているのなら、間違いなく「補数」=「2進数での2の補数」です。
お礼
丁寧なご回答まことにありがとうございます わかりやすかったです^^
お礼
丁寧なご回答まことにありがとうございます!