ベストアンサー 2の補数 2007/06/01 16:43 2進数の0と1を反転し,その結果に1を加えれば数の符号が変わるのはなぜですか? みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー noname#50176 2007/06/01 19:59 回答No.2 まず8ビットの数値“127”で考えてみます。 01111111 となりますが、2の8乗=256個のうち半分は プラス(128個)、残りはマイナス(128)になります。 0は符号抜きですのでプラスは(127個)となります。 反転させると、10000000=-128 符号を変えるのですから -127=-128+(1) ですね。 さらに-127は、符号なしですと256-127=129 ですから、 反転する(戻す)と、01111110 で126 となりますから、 126+(1)=127 で整合しますね。 (1) を1足す意味と解釈してください。 質問者 お礼 2007/06/01 23:26 他のサイトを見ても内容がよく分からなかったのですが、短い分で完璧に理解できました。本当ににありがとうございました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (1) jacta ベストアンサー率26% (845/3158) 2007/06/01 16:55 回答No.1 > 2進数の0と1を反転し,その結果に1を加えれば数の符号が変わるのはなぜですか? そう定義しているからです。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連するQ&A 2に補数 10進数から2進数を2の補数にする時はビット反転して1を足すとできますが、2進数から10進数を2の補数にするときも同じくビット反転して1を足すと正解の答えが出るのですが、そのやり方でいいのでしょうか? 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 本を見ながら解いているのですがいまいち理解できません。お手数お掛けしますが、解る方がいらっしゃいましたら解説付で教えてくださると助かります!よろしくお願いいたします! ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム 補数を利用した引き算について こんにちは。 『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の補数の問題 お世話になります。 初歩的な質問で申し訳ございませんが、質問させてください。 ------------------------------------------------------------- 問:負数を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 こちらも符号が変わることにはならないのでしょうか? どうぞよろしくお願いいたします。 2の補数 (1)10進数1、2、3の値を2進数3桁で記述しなさい。またこれらの2の補数を求め3桁で記述しなさい。 (2)2進数における「2の補数」は、コンピュータにおける数値の扱いにおいて重要な役割を担うことができる。その役割について説明しなさい。 (3) (1)の解答から(2)で解答した役割は適切に機能していることが分かる。その理由を説明しなさい。 (4)2進数で表記したある数値の「2の補数」の求め方としてして、「各桁の1と0を反転し、それに1を加える」という方法がある。この方法が成立する理由を説明しなさい。(ヒント:2^b-1がどういう数であるかを考えるとよい) この問題の(2)からどう説明していいか分かりません。 どなたか教えて下さい。 2の補数を使った計算 ある計算機があり、2の補数を「ビット反転して1を加算する」方法とするときに10進数の計算「100-80」を2の補数を使って計算する場合は16進数で表すと幾つと幾つの加算になるのでしょうか?? 2の補数を使うというのがよくわからないのですが・・・ 2の補数の求め方 2の補数の求め方で、 ・ビット反転して1を足す ・1を引いてビット反転 この2つの方法はどちらでもよいのてしょうか? 2の補数の計算について C言語のプログラム中で得られた10進数の値を,固定長16ビットの2進数に変換したいと考えています. しかしながら,得られた10進数の値が負数であった場合,それを負数と判断し,2の補数として出力したいのですが,なかなかいい方法が思いつきません… 例えば処理中で -1.915098 といったような10進数の値を2進数に変換し,先頭の1ビットが正負符号の2の補数として表現するためにはどのように記述すればよいでしょうか? 簡単で構いませんので,記述例も書いていただけると助かります… 1の補数表現 昔の本を買って情報処理の勉強をしているのですが ふに落ちない事がありまして質問させていただきます。 符号付の整数を8ビットの2進数であらわす時、1の補数表現で最小の数は-128である。 と言う問題がありまして回答が正しいとなっていました。 しかし自分は-127までしか表現できないと思いまして。。。 2の補数表現なら-128~127まで表現できると思うのですが 1の補数表現なら-127~127までしか表現できないと思います。 詳しい方がいましたらよろしくお願いします。 補数ということばの意味 補数ということばの意味 正確には計算機科学の質問なのですが、カテゴリがないのでここに質問しました。 コンピューターで負の数を表すときに、補数表現を使うことがあります。二進数の負の数を表すときに、"1の補数で表す"というときにはビット反転を行い、"2の補数で表す"というときにはビット反転プラス1を行うということはわかるのですが、"1の補数"や"2の補数"ということばの意味がわかりません。何で、"1の"とか"2の"というのですか? 2の補数を用いた符号付10進数の変換 次の問題の解き方を教えてください。 次の演算を、符号付2の補数を用いて計算せよ。bit数は符号を含めて6bitとする。あふれが生じたらそれを示せ。 (10)は10進数表記という意味です。 -8(10)-4(10) 15(10)-(-17(10)) 一応自分で解答は作ったのですが、合っている自信が全くないのでご回答お願いします 補足 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 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」ということがよくわかりません。 一応検索をしてみましたが、類似回答では理解できませんでした。よろしくお願いします。 関数電卓 EL-509F-X fx-993ES 関数電卓 シャープ EL-509F-X、カシオ fx-993ESで直前に計算した結果を符号反転して、反転した値を次の式に利用したいです。 例えば10×5=50 50を符号反転-50 -50×2=-100 のような感じです。 今まではカシオのfx-690v、fx-991sを使用していて直前に計算した結果、つまり=を押して出た値に+/-を押せば符号反転が出来ました。 10×5=、+/-、-50×2=というキー操作で-100になっていました。 どちらを使用されている方でも良いので教えて下さい。 補数表現を用いた加算 次の演算を符号つき2の補数表現を用いた加算として行い、1語の大きさは演算の結果あふれが生じない範囲で、最も小さいものを用いよ。 (1)23‐17 (2)‐23‐17 計算仮定・解説と解答お願いします。 UNIXのシェルスクリプトで負数の正負を反転させるには? UNIXのシェルスクリプトで負の数の符号を反転して生の数にしようと思ったらうまくできませんでした。 #! /bin/sh NUM=4 NUM2=-$NUM echo NUM2=$NUM2 とすると --4 となってしまいました。 また、 NUM2=`expr $NUM * (-1)` 等もやってみたのですが、エラーになりました。 結局、文字列としてawkで'-'を削ったのですが、やり方を間違えてる気がしてなりません。 awkやperl等を使わず、UNIXの単純な機能だけで数の正負を反転させる方法があれば教えてください。 基本情報でよくある2進数の符号の反転のやり方でもできると思うのですが、 10進数だとやり方がよくわかりません、、これでできるなら、このやり方も教えていただけるとありがたいです。 以上、よろしくお願いします。 1の補数の2進数での減算(基本的な事だけど) たとえば(13)10=(01101)2, (8)10=(01000)2 という数値を元に考えてみます。 1の補数なので (-13)10=(10010)2 , (-8)10=(10111)2 となります。 ここで8+(-13)と(-8)+13を求めたいのです。 <8+(-13)> ((01000)2 +(10010)2 ((11010)2 bit反転→ (00101)2 = (5)10 よって (11010)2 = (-5)10 <(-8)+13> (((10111)2 +((01101)2 ((100100)2 bit反転→ (011011)2 = ?? どうして答えが5の2進数表現にならないのでしょうか? 解き方が違うのならば、その理由が知りたいのです。 VC++ 2010 Expressで2の補数計算 テキストボックス内に ”:100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF” このようなテキストを入れて左側から2文字づつをHEXとして足し算を行い(":"は無視)、合計の数をビット反転して、最後に+1して2の補数計算をするようして、合計の下二けただけを文字列として付け足して、 :100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF54" このような文字列結果をもう一つのテキストボックスに表示させたいのですが、どのようにしたらできますでしょうか? ご教授よろしくお願い致します。 68000アセンブリについて 68000アセンブリを用いて四則演算をしたとき ADDとSUBで求めた結果は2進数の符号付、符号なしで計算した両方の結果で答えがでますか? 今68000のアセンブリをもちいて16進数のEOOOと1000の和と差を出しているのですが符号なしだと結果はあうのに 符号付きだと結果があいません。 つまりADDとSUBの結果を符号付き、と符号なしの2進数に変換して10進数に変換した結果と 足すものを初めから符号付き、符号なしにして自分で手計算した結果と同じになりますか? わかりにくい文章ですみませんが わかるかたお願いします。 16進数→2進数→16進数の際の符号 いつもお世話になっております。 今回は基数変換についてお聞きしたいです。 フォームに入っている16進数の文字列(12ABなど)を受け取って、それを2進数にしてビットを反転させた後に再び16進数にしたいのです。 その部分はtoStringでできそうなのですが、この場合、符号はどのようになるのでしょうか? 少しやってみた感じでは符号なしのように動いたのですが実際はどうなっているのでしょうか? 探してみましたがはっきりと書いてあるところが見当たりませんでしたので詳しい方、ご教授願います。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
他のサイトを見ても内容がよく分からなかったのですが、短い分で完璧に理解できました。本当ににありがとうございました。