• ベストアンサー

2進法と10進法の演算問題

2進数→10進数(負の数)<2の補数表現> 8bit(8桁)の一番左のbitは符号bitとする 1)11111111 2)10011100 3)1.0010000 4)1.1100001 上記の問題が分かりません。 4桁ずつに分けて10進法に直して考えればよいのでしょうか? 補数表現自体よく分からないです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

1)2)の場合は、普通の正の2進数だと思って10進数に直した数から 2^8=256 (その桁数で表せる最大値+1)を引いてください。 例えば、10011100 なら、 普通に10進数に直すと、128+16+8+4=156 2^8 を引くと 156-256=-100 です。 あるいは、1を引いて0と1を反転すれば絶対値が出てきます。 例えば、10011100 なら、 1を引いて 10011011 0と1を反転して 01100100 10進数になおすと 64+32+4=100。 よって、答えは -100 です。 3)4)は自信なしです。 上の方法なら、普通に10進数に直した数から2を引けばいいのではないでしょうか。 1.0010000 を普通に10進数に直すと 1+(1/8)=1.125 2を引くと 1.125-2=-0.875 また、下の方法なら 1.0010000 から 0.0000001を引いて 1.0001111 ビット反転させて 0.1110000 10進数になおすと (1/2)+(1/4)+(1/8)=0.875 よって、答えは -0.875 です。

その他の回答 (3)

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.4

1の補数とはすべてのビットの1と0を入れ替えたものです。 00110101だったら11001010です。 2の補数とは1の補数に1を足したものです 00110101だったら11001010に1を足して11001011です。 二進法で2の補数を扱う理由は加算するときに例外を設ける必要がなくなる、引き算を加算回路で行えるということです。 たとえば、5+(-3)という計算を二進法で行う場合-3を一番上のビットを符号として絶対値を残りのビットで表した場合 0101+1011になりますが、1011が負数なので引き算として計算しなければならなくなります。 2の補数を使った場合 0101+1101となり、普通に足し算をしても0010(桁あふれは切り捨て)となり、正しく計算することができます。 引き算の場合は足し算に置き換えて計算します。 5-3 → 5+(-3) 2の補数であらわされた数値を元に戻すのも同じ手順で行うことができます。 0と1を入れ替えて1を足せば-1倍されます。 2の補数を用いた少数表現についてはわからないので3,4についてはわかりません。

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

3と4は、問題書き間違えてないかな? 2進数で仮数表現使わないで小数点以下を表すとは思えないのですが・・・。

  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.1

http://www.pursue.ne.jp/jouhousyo/sysad/sysad010.htm (http://www.pursue.ne.jp/jouhousyo/doc_jouhou.htm) http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/h13sm/h13sm_02.htm (http://www.jtw.zaq.ne.jp/kayakaya/) これらのサイトが解き方を丁寧に解説してくれています.「情報処理技術者試験」「基本情報~」「シスアド~」などで検索するといろいろ情報基礎の解説が出てきます. 補数表現とは2進表現において負数を表すために,一番最上位のbitを正負の表現に使う表現です(1の補数表現). しかし,そのままだと 10進の0を表す2進表現が 00000000 と 11111111 の2通りになってしまうので, 0以下を負の方向に1ずらして表現します(2の補数表現). なので,1の補数表現で表される値の範囲は+127~-127(0が重複)ですが,2の補数表現では+127~-128となっています. http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/fusu.htm

関連するQ&A

  • 問:負数を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の補数を使用していなかったので、疑問に思っています。 頭が混乱しております・・・。 回答宜しくお願い致します。

  • 2進演算について。

    以下の問題でのこの答えが合っているか自信が無いので確認と間違いがあれば指摘をお願いします。 (1)次の整数を8bitsの符号+絶対値表現、2の補数表現、127増し表現で表現しなさい。    -20    +55 (2)次の10進小数を、32ビットの浮動小数点表示しなさい。    -123.8125 答(1) -20 (+絶対値表現)→ 1001 0100 (2の補数表現) → 0001 0100 (127増し表現) → ? -20の+絶対値表現というのはそのまま20の8bit表示でいいんでしょうか? マイナスなので一番左のビットに1を立てればいいだけでしょうか? それと-20の2の補数表現は-20の2進表現を逆数にして1足すので結局20の2進数でいいのでしょうか? +55 (+絶対値表現)→ 0011 0111 (2の補数表現) → 1100 1001 (127増し表現) → ? これは+なので普通に考えてこの答えで間違いがあるでしょうか? それといずれの問題でも「127増し表現」というのはどうすればいいのでしょうか? 答(2) -123.8125の32ビット浮動小数点表示は 123.8125(10進)→ 111 1011.1101(2進) 0.11110111101×2^7 (正規化) で、32ビットの浮動小数点表示は 1 00000111 11110111101000000000000 なると思うのですが、どうでしょうか? 解答と指摘をお願いします。

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

    こんにちは。 『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. 実際には 本のように引く数だけを補数にして足し算をして答えを求めているのか、 それとも私のように正の値・負の値、ともに符号付きの表現にして足し算をしているのか、 もしくは、いずれとも違うのか、どうなのでしょうか? また、参考文献などがありましたらご紹介お願いします。 以上ですがよろしくお願いします。

  • 変位指数表現・・・

    わからない問題があるので教えてください。 仮数部を2進数10桁の符号絶対値表現とし、 指数部を2進数6桁の変位指数表現としたときの値域を求めなさい。 という問題なのですが、よくわかりません。 自分なりにとりあえず最大値最小値を考えてみましたが…。 仮数部 ・最大 0111111111 (→ +511) ・最小 1111111111 (→ -511) 指数部 ・最大 011111 (→ +31) ・最小 111111 (→ -31) 符号絶対値表現ということは、こういった書き方でいいのでしょうか…。 2の補数を使って負の数を表現するやり方は、ここでは関係ないのでしょうか? 値域の求め方もわかりません。 どなたか教えて頂けるとありがたいです。

  • 2進数の足し算について

    CPUは引き算を行うことができず、2の補数を用いて引き算を足し算として考えれると知りました。 そこで8bitの最上位桁を符号とした7bitの引き算-24+(-8)を計算してみたのですが 24(10進数)→0011000(2進数)→1101000(2の補数) 8(10進数)→0001000(2進数)→1111000(2の補数) 符号 7654321←bit  1 1101000 +1 1111000  X 1100000 となり、1100000の2の補数をとると 0100000(2進)→32(10進数)で答えを求められました。 そこでお聞きしたいのですが、値を足したとき(↑の例だと1100000)が求められたときにどういった条件だと1100000の2の補数をとる必要があるのでしょうか? ↑の例だとXがどの条件のときでしょうか? 質問が長くなってしまいましたがよろしくお願いします。

  • 負の整数を求める

    負の整数を表現する問題で質問です。 4ビットのパターン1101を下記の通りに求め、小さい順に並び変える場合、 1, 1の補数による表現 2, 2の補数による表現 3, 絶対値に符号を付けた表現(先頭ビットが0は整数、1は負数) 1の補数は反転なので、0010とわかりますが、回答にこれは10進数の2だからと書いてありました。そこまではわかります。ただ、そのあとに、10進数の2だから、1101はマイナス2、とありました。なぜここでマイナス2となるのでしょうか? 2の補数の場合は反転した1の補数に1を加算して、0011とわかりました。しかし、またそれはマイナス3となっています。 3の絶対値に限っては先頭ビットは1なので負で、残りの3ビットは101で、10進数の5だから、マイナス5とあります。これに限ってはよくわかりません。 どなたか説明をお願いします。

  • 初心者な質問その7

    8bit符号付整数(2の補数表現)における最大値と最小値は いくらになるんでしょうか?(10進数で) 本当に初心者な問題ですみません。 2の補数表現、なにを意味する表現なのかさっぱりわかりません。 持ってる教科書を何度読み返してもわからなかったので質問しました。 宜しくお願いします。

  • 2の補数の問題

    お世話になります。 初歩的な質問で申し訳ございませんが、質問させてください。 ------------------------------------------------------------- 問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。 ア 1FFF イ DFFF ウ E000 エ FFFF ------------------------------------------------------------- 答えはイなのですが、イマイチです。 とある解説だと、4倍すると符号が変わるものがあふれとのことでした。 DFFF →(2の補数)0010 0000 0000 0001 →(4倍する)1000 0000 0000 0100 確かに符号が変わることは分かるのですが、ウでも E000 →(2の補数)0010 0000 0000 0000 →(4倍する)1000 0000 0000 0000 こちらも符号が変わることにはならないのでしょうか? どうぞよろしくお願いいたします。

  • シフト演算について

    シフト演算について   正の数の場合,シフト操作によって0が消えていくのは問題ない。   シフト操作によって1が消えると結果が変になる。これが「あふれ」 2の補数表現による負の数の場合,結論はこうなります。   負の数の場合,シフト操作によって1が消えていくのは問題ない。   シフト操作によって0が消えると結果が変になる。これが「あふれ」 以下からの抜粋です。 http://okwave.jp/qa/q4302488.html 負の数の場合,シフト操作によって1が消えていくのは問題ないのはなぜですか?

  • 浮動小数点の問題です。

    10進数+0.375を浮動小数点で記憶させ、その記憶領域のダンプリストを読み取ると、 0.375は16進数で(1)に、 -1は16進数で(2)となる。 答えは(1)は7F00、(2)8600です。 この2つの問題の途中式と解説をお願いします。 バイト型:バイト数は1バイト,負の補数は2の補数で表す 整数型:バイト数は2バイト,負の補数は2の補数で表す 浮動小数点:バイト数は2バイト,符号1ビット,指数部5ビット,仮数部10ビット ビット番号0:符号部.仮数部の符号が入っている.0なら正,1なら負 ビット番号1-5:指数部.負の値を2の補数で表す ビット番号6-15:仮数部.ビット番号6を小数点第1位とする仮数部の小数点以下の絶対値が、正規化された2進数で入っている 正規化とは,仮数部が2進数で0.1以上1.0未満になるよう指数部を増減する操作である