• 締切済み

2の補数について

みなさん教えてください。 今、情報関係の仕事に就き資格を取ろうと思っています。 その資格試験の問題に、下記のような問題が出てきて困っています。 考え方と回答を教えて頂けませんか。 お願いします。 (問題) 「16ビットを2の補数で表したとき、10進数の範囲は?」

みんなの回答

  • ssp2548
  • ベストアンサー率28% (4/14)
回答No.7

2の補数についての詳しい話は各所で既出と思いますので省略しますが、 試験中に10進数の範囲をど忘れしてしまった場合の計算方法だけ述べます。 Nビット長の2の補数表現の範囲は -2^(N-1)から2^(N-1)-1 です。N=16の場合、2^15を計算できればよいですが、例えば、 2^15 = 2^(8+7) = 256*128 のように分解すれば紙と鉛筆があれば計算できます。

noname#231223
noname#231223
回答No.6

No.2です。 とんだ間違いで失礼しました。 最近0~255ばっかり扱ってたクセで、-1を余分にやってしまったようです。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.5

http://okwave.jp/qa/q4175997.html の私の回答No.2 を参照していただければ,16ビット長の2の補数における 最大値は 0111111111111111 という正の数で 最小値は 1000000000000000 という負の数であることが分かります。 これを10進数に変換して,回答No.4が正解。 > 0111 1111 1111 1111 (B) > 10進数で「32766」です。 > > 「1000 0000 0000 0000 (B)」となります。 > 10進数で「32767」ですね。(回答No.2) 惜しかったですね。 前者は末尾bitが1なので奇数,後者は末尾bitが0なので偶数です。

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.4

「0111 1111 1111 1111」は10進数で「32767」です。 従って、-32768 から 32767 の範囲になります。 「2の補数」で検索すればすぐにいろいろな情報が見つかりますが、「2の補数」の定義をしっかり把握してみて下さい。そうすれば簡単に回答が判ります。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

#2には計算間違いがあるので、質問者さん御自身で計算しなおしてください その計算ができないと、資格を取れても、実務では厳しいと思います。

noname#231223
noname#231223
回答No.2

16ビットですから、2進数16桁ですね。 見やすくするため、4ケタ区切りにしておきます。スペースに意味はありません。 「2の補数で表したとき」とありますから、負の数を扱う(マイナスを2の補数で表す)わけです。 先頭ビットが0のときは「正の数」またはゼロ、1のときは「負の数」を表すことになります。 そうなると、 ・正の数の最大値は、先頭ビットがゼロ、残りのビットがすべて1のときです。 0111 1111 1111 1111 (B) 10進数で「32766」です。 ・負の数の最小値(絶対値が最大)は、先頭ビットが1、残りのビットがすべて0のときです。 1000 0000 0000 0000 (B) この絶対値は、2の補数をとって(0と1を反転し、1を足す)やると求められます。 結果は「1000 0000 0000 0000 (B)」となります。10進数で「32767」ですね。 つまり答えは、-32767~32766となります。 負の数をあらわすのに使う「2の補数」がわからないなら、教科書や参考書をよく読んでください。 2の補数表現はそのまま足し算できて便利な半面、負の数を見てもすぐ数値をイメージしづらい面はありますね。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「2の補数」について何をどこまで調べた?

関連するQ&A

  • 2の補数について

    情報処理試験(基本情報)用の考え方という前提でお聞きします。 「負数を2の補数形式で表現する2進数の計算で・・・・」という問題がよくあります。 この問題文の中で「10101」などの数(これは5ビットの符号付2進数とします) として記述されているものは、もう2の補数になっていると考えていいのでしょうか? それともこれを、今から2の補数に直すのですか? (もし直すのであれば、最上位ビットの符号が変わるのでしょうか?) 違う言い方をしてみますと「A」の2の補数が「-A」だとしたら、 「-A」の2の補数は「A」になるんでしょうか? それとも「そんな表現はない。-Aの時点ですでに2の補数だ」という ことになるのでしょうか? 解りにくくてすみません。

  • 補数について教えてください!

    情報処理技術者試験の内容なんですが、やり方も理解できず悩んでいます。教えてください。 その1. 2の補数を使って解きなさい   0110  -)0111 ------------ その2. 次の2進数は2の補数であらわした負の値である。符号付きの10進数に変換しなさい。  1) 1001  2) 1010  3) 1111  4) 1000 その3. 次の10進数を2の補数(4ビット)に変換しなさい。  1)-6  2)-3  3)-5  4)-4 本を見ながら解いているのですがいまいち理解できません。お手数お掛けしますが、解る方がいらっしゃいましたら解説付で教えてくださると助かります!よろしくお願いいたします!

  • 1の補数表現

    昔の本を買って情報処理の勉強をしているのですが ふに落ちない事がありまして質問させていただきます。 符号付の整数を8ビットの2進数であらわす時、1の補数表現で最小の数は-128である。 と言う問題がありまして回答が正しいとなっていました。 しかし自分は-127までしか表現できないと思いまして。。。 2の補数表現なら-128~127まで表現できると思うのですが 1の補数表現なら-127~127までしか表現できないと思います。 詳しい方がいましたらよろしくお願いします。

  • 2進数、2の補数について

    負の表現を2の補数とすると、4ビットで扱うことができる整数の範囲は、10進数で○~○である。 という問題がわかりません。 答えは-8~7とあるんですが・・・。 冬休みに入って先生に聞けないので、どなたか教えて頂ければと思います。 どうぞアドバイスよろしくお願い致します。

  • 2進数の補数表示について

    よろしくお願いします 「負の数(-128)を8ビットの2の補数表示するとき、どうなるか?」 の問題で、わからない箇所があります。 1.最上位ビットは正・負を表す。 2.負の数:-127を2の補数を使用して表現する。    (例)-1(10)==>    まず、正で考える。      ==> 0000 0001(2)      「確認」 1111 1110(反転)            +1(プラス1) ---------- 1111 1111(2)(答え) -127(10)      ==>0111 1111(2)  まず、正で表す。    「確認」        1000 0000(反転)           +1 (プラス1) ---------- 1000 0001(答え) ここからが疑問なんです。    -128(10)の場合      ==>1000 0000(2) まず、正で考える。    「確認」        0111 1111(反転) +1 (プラス1)       -----------      1000 0000(2)(答え) ↑ ・答えがプラスの128(10)=>10000000(2)と同じではない  でしょうか? ・このときの最上位ビットは桁上がりの「1」と正負の違  いを表す「1」のどちらを表しているのですか? ・たとえば「負数を2の補数で表すとき,8ビットで  表現できる整数の範囲は10進数でどれか。」など  の問題で答えが正の127は理解できるのですが、  負は「-128」ということがよくわかりません。 一応検索をしてみましたが、類似回答では理解できませんでした。よろしくお願いします。        

  • 10進数の補数

    基本情報のテキストのコラムに載っていたことなのですが理解できません 「10進数の補数の場合だと、9の補数と10の補数があることになりますね。 たとえば、2桁の範囲で考えると、 70の9の補数は99-70=29、 10の補数は100-70=30、 となりますね」 ・・・ 意味が・・・わかりません 一応、1の補数、2の補数 については勉強したばかりで理解できているつもりです。 教えてください。 お願いいたします

  • 2の補数表現2進数が表す10進数は?、

    次の2の補数表現の2進数が表す10進数はいくらか? 1111 1111 1111 1111 1111 1111 1111 1111 という問題があるのですが、 これを解くと、まず、上のビット列は2の補数表現なのだから、これはマイナスですよね?そして、次にビット列を2の補数を求めるやり方でやると元の数がわかりますよね(この辺がいまいち解っていない)? という事は全ビットを0にして、最下位ビットに1を 足せばいいから0000 0000 0000 0000 0000 0000 0000 0000 + 1 =0000 0000 0000 0000 0000 0000 0000 0001 となります。10進数だと 1を表すから答えはー1という事になるのでしょうか?お願いします。

  • 問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示

    問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。 ア 1FFF イ DFFF ウ E000 エ FFFF 以下は、それぞれを2進数表示にしたものです。 先頭の符号ビットは[0]の表記で目立たせてあります。 ア [0]001 1111 1111 1111 イ [1]101 1111 1111 1111 ウ [1]110 0000 0000 0000 エ [1]111 1111 1111 1111 以下は、4倍したもの ア [0]111 1111 1111 1100 イ [0]111 1111 1111 1100 ウ [1]011 0000 0000 0000 エ [1]111 1111 1111 1100 この場合は、ア以外は負数ですが、『負数を2の補数で表現する符号付き16ビットの2進数を、16進数で表現した場合』は16進数が正の数でも、2進数だと負数になると言う事でしょうか? また、符号付きでない場合は、上記はすべて正の数と言う事で合ってますか? 回答を見る感じでは16進数を2進数に変換しただけで、『2の補数で表現』の部分がないように思えます。この辺りも知りたいです。 問題の解き方についても疑問があります。 http://questionbox.jp.msn.com/qa4278151.html での回答では、 イ DFFF →(シフト前)1101 1111 1111 1111 →(シフト後)0111 1111 1111 1100 先頭ビットが1から0に変わったので「桁あふれ」。 問題集の回答ではこっちで説明されていました。 http://okwave.jp/qa/q4302488.html のANo2回答では (シフト前)[1]101 1111 1111 1111 (シフト後)[1]111 1111 1111 1100 2の補数表現による負の数の場合,シフト操作によって1が消えていくのは問題ない。 シフト操作によって0が消えると結果が変になる。これが「あふれ」 符号はシフトさせず、左に2つシフトさせた事で、10が消えた事で桁あふれとしています。 ANo1の回答では、 DFFFだと同様に 1101 1111 1111 1111で1の補数は 0010 0000 0000 0000 2の補数は 0010 0000 0000 0001 つまり、-8193ですよね。 4倍すると、-32772で、これは16ビットの2の補数表現 で表現できる数の範囲からあふれてしまいます。 DFFFなどの2進数に変換後、2の補数を使用するのが正しいのでしょうか? 最初の2つの回答では2の補数を使用していなかったので、疑問に思っています。 頭が混乱しております・・・。 回答宜しくお願い致します。

  • 補数表現で表現できる数値の範囲

    8ビット固定小数点(補数表現)で表現できる数値の範囲を 求める問題があります。 この場合の補数表現は2の補数且つ符号付絶対値表現なのでしょうか? また、この問題の解説をお願いします。

  • 補数を利用した引き算について

    こんにちは。 『2進数で 111 - 010 を計算をせよ。』 という問題があります。 つまり10進数でいう所の 7 - 2 = 5 の計算をします。 補数を利用すると引き算が足し算ででき、演算が簡単になることを 本は説明しようとしてるのですが、腑に落ちない点があります。 解説では --------------------------------- 引く数 010 の補数を求めると 101 なので  111 +101 -------- 1101  ↓  101 よって桁上がりを無視した 101 が答え --------------------------------- との事ですが疑問に思うことがいくつかあります。 I. 上記の計算では3ビットであることが前提になっています。 7 - 2 = 5 をしたいわけですから、そうすると  111 ←符号なしの表現 ( 7 ) +101 ←符号付きの表現 ( -2 ) -------- 1101  ↓  101 ←符号なしの表現 ( 5 ) となり、符号なしと符号付きの数値を混ざってしまうが、良いのでしょうか? また、この説明の仕方だと答えが 0~7 になる答えしか出せません。つまり引く数の方が大きいと計算できません。 私は補数を使うのであれば正の値・負の値、全て符号付きの値でなければいけないと思っていたので、 もし私が説明するのであれば全て符号付きにし、そして符号付きで7を表せるようにするために4ビットにして  0111 ←符号付き( 7 ) +1110 ←符号付き( -2 ) ---------- 10101  ↓  0101 ←符号付き( 5 ) とするのであれば納得できます。 答えの範囲も -8~7 と負の値も許容できます。 II. 実際には 本のように引く数だけを補数にして足し算をして答えを求めているのか、 それとも私のように正の値・負の値、ともに符号付きの表現にして足し算をしているのか、 もしくは、いずれとも違うのか、どうなのでしょうか? また、参考文献などがありましたらご紹介お願いします。 以上ですがよろしくお願いします。