
10進数における補数の求め方は、絶対値同士を加算し桁が上がりする関係を持つ数が補数です。
-1の補数を求めるときは、-1の絶対値である1に9を加算することで10となるので、-1の補数は、9です。
2進数における補数の求め方は、数値を反転し、下一桁目に1を加算することです。
合っているか自信はないのですが、10進数、2進数の補数の求め方は、分かったのですがそれ以外のn進数における補数の求め方は、10進数と2進数のようにばらつきがあるのでしょうか。
それとも、何か共通の求め方があるのでしょうか。n進数の補数の求め方を教えてください。
No.8ベストアンサー
- 回答日時:
「補数」と、「補数(を使った負数の)表現」と、「実際の運用」とを分けて考えてください。
10進法1桁では、足して10になる(1桁なので溢れた分を無視して0になる)数を「補数」とよびます。
※ 正確には、 10進法1桁における「10の補数」
0の補数は0(10だと2桁になるので)
1の補数は9
2の補数は8
3の補数は7
4の補数は6
5の補数は5
6の補数は4
7の補数は3
8の補数は2
9の補数は1
n進法m桁なら、 aの「nの補数」は n^m - a です。
補数には、それ以上の意味はありません。
「負数」とは無関係です。
数学で
a + b = 0
のとき、
b = -a
となります。
a=1 なら b=-1 です。
ここで、10進法1桁の世界を考えます。
a=1, b = 9 (1の補数) と考えると
a + b = 0 (10の桁溢れを無視)
これを、マイナス記号のある世界の数学に対応させると
b = -a 、すなわち、 9(1の補数) = -1 となります。( = の意味が本来とは違ってきます)
同様に、n進法m桁の世界では、
X + (-a)
は
X + aの補数
と同じ結果になる、ということがわかります。
この性質に注目して、「マイナス記号のある世界の負数 -a」は「マイナス記号の無い世界の aの補数」に置き換える、というのが、「補数を使った負数の表現」です。
マイナス記号のある世界では「マイナス記号を使った負数の表現」を使っていることになります。
マイナス記号の無い世界に 「3」 という答えがあったとします。
では、これをマイナス記号のある世界に持ってきたとき
・そのままの3
・3は7の補数なので、負数である -7 に変換
のどちらになるでしょうか?
これだけでは判断できません。
そこで、予め「そのまま使う値」と「負数を補数表現したものと見做す値」に分けておきます。
0〜4は「そのまま」5〜9は「負数の補数表現」と決めておけば、3は「そのまま」となります。
これは「実際の運用」の話になります。
通常は、上記のように 0〜(((n^m)/2)-1)を「そのまま」、((n^m)/2)〜((n^m)-1) を「負の補数表現」に割り振ります。
※ 特に、2進法で上記のように割り振ると、一番上の桁が0なら「そのまま」、1なら「負の補数表現」と簡単に判断できるようになります。
ですが、目的に合せて「-7〜+2」とかにしてもかまいません。
あくまで「実際の運用」をどうするか、の話です。
「補数を使った負数の表現」は万能ではありません。
例えば -1<1 ですが、 補数表現を使うと 9 > 1 となってしまいます。
9 < 1 と判定させるには、「 9は負数 1は正数、よって 9 < 1 」 といった、通常の数値判定以外の判定手順が必要になります。
そのため「マイナス記号のある世界の負数 -a」を「マイナス記号の無い世界」へ変換する方法はいくつも考えられていて、目的によって使い分けています。
----
そのitproの記事は、簡単に説明するためか、次のようになっています。
・「補数」と「補数を使った負数の表現」の区別がついていない
・負数の表現が「補数を使った負数の表現」しかないような書き方になっている
一般人の豆知識としてはいいですが、より正確に知ろうとするなら、ちょっと不適かと思います。
----
よく、「補数は反転して+1」と説明しているのを見ます。
これは、10進1桁で言うなら
(9 - a) + 1
と計算する、ということです。 9-a が「反転」にあたります。
これは結局
10 - a
を計算するのと同じことだということがわかるかと思います。
コンピュータの場合、通常「ビットを反転する」「+1する」という計算が回路に組込まれていて、真面目に 0 - a と引き算するより、「反転」「+1」とした方が効率がいい場合があります。
これは、計算を楽にするためのテクニックの話しです。
「反転」「+1」 は補数とは直接関係はありません。
「2進法のビット反転」を、相当するn進法の引き算にすることで、n進法でも同様のテクニックが使えます。
実際に、10進法8桁での補数を
・100000000 - 82 で計算
・99999999 - 82 を計算して +1 する
の2通りで筆算してみてください。
前者は繰下げが沢山あって面倒なのに比べて、後者は簡単だと実感できるはずです。
なお、この「反転」の値を、n進法m桁における「(n-1)の補数」と呼びます。
No.9
- 回答日時:
> 5+(-9)=-4
「 10進一桁の世界」 に 「マイナス」記号を持ち込んではいけません。
この場合、「 -4 」は「 4の補数=6 」にする必要があります。
> n進法m桁の世界では、X + (-a) は X + aの補数 と同じ結果になる
これは、数学では
X + (-a) ≡ X + 「aの補数」 (mod n^m)
と表現できるのですが、「合同式」ってわかりますか?
② 上記の式は、何を求める式なのでしょうか。
→ 実際に、n と m に適当な値を入れて計算してみてください。
単に、 n進m桁で表現できる値を2つに分けただけです
No.7
- 回答日時:
>9の補数は、1で、その9の補数である1は、
>-9の補数表現なので0 →-10, 1→-9、
>2→-8, 3→-7, 4→-6ではないのでしょうか。
そう考えても実用性ないのでやりません。
1が1でもあり―9でもありでは困るだけです。
数学の定義ではなくて、負の数をどう表現するか
という話だということに注意。これは実用のための
ひとつの「取り決め」なのです。
No.6
- 回答日時:
>>>3の補数が7 で
>絶対値を使って説明するときに「補数」、
>>>7は-3の補数表現
>負を含んだ数値を使って説明するときが「補数表現」という言葉を使うという>ことなのでしょうか。
そうといってしまえばそうなんですが、そういう形式的な話ではないです。
例えば・・・、話を10進一桁の数に絞りましょう。
この数のシステムでは、数は
0,1,2,3,4,5,6,7,8,9
の10種類で負の数はありません。
このシステムには、足し算が定義されていて、
1+3=4
などと計算が行えますが、
3+9=12
は12は存在しないので、できません。
そこで、桁上りを無視することとして
3 + 9 = 2
と計算するようになっています。
以上の本来負の数も引き算も存在しないシステムで、
3 + (-2)= 1 あるいは 3 - 2 = 1
というような計算が、システムをそのまま「流用」して
できないか?
というのが負の数を表すのに補数を使うという「アイデア」です。
つまり
-2 の代わりに 8 を使う、8を -2 と見なすことで
負の数、あるいは引き算を実現しようということです。
3+(-2) = 3 + 8 = 1
このようなシステムでは
0 →0, 1→1、2→2, 3→3, 4→4
5→-5. 6→-4, 7→-3, 8→-2, 9 →-1
というように、数を置き換えて考えます。
このとき -3 を 7, -5 を 5 などに対応させる
ことを(負数の代わりに補数を使うことを)、
「負数を補数で表現する」と言います。
ここから、「負数の表現形式に補数を用いる」
というような言い方が生まれます。
ちなみに、蛇足ですが、負数を表す表現形式は
補数だけではありません。
No.5
- 回答日時:
>>>10進の4桁目の桁上りを無視するシステムでは、
>>>8 + 999 = 7
>4桁目を削除するので1007ではなく007、
>つまり7ということだと思うのですが、8+999の8と7は、
>どういう意味をもっていますか。
まず、-3の補数が 7 というように、itProの記事に書いてあった
とおっしゃってますが、そうではなくて、
-3 の補数表現が 7
が正しいですよね。これは全然意味が違う。
10進一桁の場合、
3の補数が7 で
7は-3の補数表現
です。
この意味の違いをよく考えましょう。
4桁目の繰上りを無視するシステムでは
8 + 999 = 7
となりますが、これは
8 + (-1) = 7
と同じ、つまり、999が (-1) と同じ役割をはたして
います。これが 999 が -1 の「補数表現」の意味です。
999 は 1 の補数です。
No.4
- 回答日時:
No.2です。
「補足」に書かれたことについて。>負数の補数に関しては下記のサイトを参考にしたわけですが、-3の補数が7とあったので、お互いを加算し10になるのが補数なのだと思ったので-1の補数は9と書いたのですが、tknakamuri氏の回答を見る限りどうも間違っていたようです。
はい、違っています。
「各桁ごとに」そうするのではなく、「有効桁」最大数についてそうするのです。
「-3の補数が7」というのは「有効桁が1桁の場合」の話です。
「桁あふれを無視する」のは「有効桁の上の桁」ですることなので、「補数」の議論をするときには、「有効桁」を決めて議論しないと成り立ちません。
「各桁」ごとの数値処理ではなく、「有効桁」の数での処理ということです。
tknakamuri氏の回答も、そういうことを言っているのです。
「n進数m桁での a の補数は n^m-a (a ≧0)」というのは、「有効桁が m桁の n進数」ということです。
No.3
- 回答日時:
>n進数における補数の求め方は、
>10進数と2進数のようにばらつきがあるのでしょうか。
全部同じで違いはありません。10進でも2進でも同じ
n進数m桁での a の補数は n^m-a (a ≧0)
これだけです。
例
10進3桁での 111 の補数は 10^3-111= 1000-111=889
2審で3桁での 011(2進表現)=3(10進表現) の補数は
101 (2進表現)=5(10進表現)
つまり 2^3 -3 = 8 - 3 = 5
が補数です。全く同じやり方ですよね?
ちなみに -1 の補数という表現は変。
補数とは正しかない数で定義するもので、
計算機システムでは補数と桁あふれの無視を利用して
補数を負の数とみなします。
例えば、
10進3桁の1の補数は 10^3-1 = 999。
10進の4桁目の桁上りを無視するシステムでは、
8 + 999 = 7
となるので 1の補数 999 を -1 と「みなす」ことができます。
No.2
- 回答日時:
通常出て来る 2進数の「補数」とは、「減算」を「加算」で行うためのものです。
「補数」とはそういう位置づけのものとして考えます。従って、質問に書かれている「負数の補数」というのは、何のことかわからないので、ここでは「正数」の補数について書きます。
2進数では、「1の補数」とは、相互に加算すると全桁が「1」(「1111・・・・1111」)になるもので、それに「1」を加えれば全桁が桁上がりして、最上桁で「桁あふれ」して、見かけ上「有効桁がすべて0になる」というものです。この「1の補数」に「1を加えたもの」が「2の補数」です。
つまり、補数をとりたい数値 A に対して、B を「1の補数」とすると、「B + 1」が「2の補数」となって
A + (B + 1) = 0
となるので、このBを B + 1 = -A と定義して、「Aとの減算」を「(B + 1) との加算」とするのです。
N進法でいえば、「(N-1) の補数」とは、相互に加算すると全桁が「N-1」(「XXXX・・・・XXXX」: X=N-1)になるもので、それに「1」を加えれば全桁が桁上がりして、最上桁で「桁あふれ」して、見かけ上「有効桁がすべて0になる」というものです。この「(N-1) の補数」に「1を加えたもの」が「N の補数」です。
2進数の場合には、各桁が「0か1」しかありませんので、補数を取りたい数値の「0と1をひっくり返す」で済みますが、これは「有効桁数全体の「1111・・・・1111」から、補数を取りたい数値を引く」という操作をしているのです。
同様に、10進数 A の補数とは、有効桁数全体の「9999・・・・9999」と A との差をとり、それに「+1」したもの、ということになります。従って、各桁の数値で見れば、「9からその桁の数値を引く」という操作になります。
さらに同様に、n進数 A の補数とは、有効桁数全体の「XXXX・・・・XXXX」(X=n-1)と A との差をとり、それに「+1」したもの、ということになります。この場合にも、各桁の数値で見れば、「(n - 1) からその桁の数値を引く」という操作になります。

No.1
- 回答日時:
何言ってるのかよくわかりませんが。
補数って何でしょうか。
>絶対値同士を加算し桁が上がりする関係を持つ数が補数です。
じゃあ[100]の補数は、[899]と[-899]の2つあるんですか?おかしいですよね。
>2進数における補数の求め方は、数値を反転し、下一桁目に1を加算することです。
いわゆる「2の補数」「減基数の補数」ってやつを指してますか。
2進数の場合「反転」で済むのは使う数字が2個しかないからです。1の他は0だけだし
0の他は1だけだから。
正しくは、
10進数なら、その数を、同じ桁数の「9並びの数」引いて1を加えたもの
です。
n進数なら、その数を、同じ桁数の「n-1並びの数」引いて1を加えたもの
ということ。
>n進数の補数の求め方を教えてください。
その数字の桁数の最大値-その数字+1です。簡単なこと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 2変数関数の条件つき極値問題について、 ラグランジュ未定乗数法で候補点を求めたあと、 ①ヘッセ行列の 4 2022/11/13 18:14
- 統計学 確率統計の問題です。 3 2022/04/07 04:39
- 経済学 需要関数と供給関数がそれぞれ Y=D(p)=1000−p、Y=S(p)=2p−200で与えられている 1 2022/06/14 09:50
- 統計学 確率統計です。赤玉が 3 個、白玉が 7 個入った袋がある。 3 2022/05/07 08:36
- 計算機科学 ビット計算 2 2023/04/16 14:26
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
- 数学 【 数I 最大値・最小値 】 問題 2次関数f(x)=-x²-4x+1のa-1≦x≦a+1にお ける 1 2022/07/17 12:56
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 高校 数学Ⅰの一次関数について。 6 2023/08/15 02:15
- 数学 整数問題7 3文字の整数問題 5 2023/04/09 09:56
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル:6E-05という表現は?
-
7で始まる電話番号?
-
数値とアルファベットに分ける...
-
3÷7のあまりは「3」ですか?
-
2進数の割り算が分かりません...
-
EXCELで10万未満切捨ての...
-
数学の階乗はどんな時に使うの...
-
1÷7の循環小数についてなのです...
-
NUMBER(N,M) としたときの、格...
-
大雪で小屋根の軒桁が外れた
-
60進法と10進法
-
小数と分数を2進数に直すやり方...
-
14桁の16進数を10進数で表した...
-
10^210/(10^10+3)の整数部分の...
-
エクセルのsumifの検索値
-
アナログの電力量計を見たとき ...
-
合同式について
-
Excelで数値の丸め
-
電話番号のハイフンの入れ方
-
関数電卓の表示方法を変更したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル:6E-05という表現は?
-
7で始まる電話番号?
-
数値とアルファベットに分ける...
-
数字3桁の組み合わせの何通り...
-
2進数の割り算が分かりません...
-
3÷7のあまりは「3」ですか?
-
数学の階乗はどんな時に使うの...
-
NUMBER(N,M) としたときの、格...
-
EXCELで10万未満切捨ての...
-
大雪で小屋根の軒桁が外れた
-
3分の1とは何パーセントでしょ...
-
電話番号のハイフンの入れ方
-
エクセル関数で桁数指定し数値...
-
関数電卓の表示方法を変更したい
-
Excelで数値の丸め
-
エクセルのsumifの検索値
-
好きな数字が並ぶ不思議?
-
【場合の数】 2桁の自然数で、2...
-
0以下の数字は何桁?
-
60進法と10進法
おすすめ情報
ご回答有難うございます。本当に毎回とても助かっております。
重ね重ね申し訳ないのですが、
>>補数は減算を加算して...<中略>質問に書かれている「負数の補数」というのは...
というのは、例えば「5-3」という計算式の-3を「7」として扱う、つまり5+7にするということですか。
負数の補数に関しては下記のサイトを参考にしたわけですが、-3の補数が7とあったので、お互いを加算し10になるのが補数なのだと思ったので-1の補数は9と書いたのですが、tknakamuri氏の回答を見る限りどうも間違っていたようです。
http://itpro.nikkeibp.co.jp/members/ITPro/ITBASI …
ご回答有難うございます。おかげさまで理解が深まったような気がします。
式を教えていただけたことで前進できそうです。
>>10進3桁の1の補数は 10^3-1 = 999。
3桁の1は、「001」ということですか。
>>10進の4桁目の桁上りを無視するシステムでは、
>>8 + 999 = 7
4桁目を削除するので1007ではなく007、つまり7ということだと思うのですが、8+999の8と7は、どういう意味をもっていますか。
ご返答有難うございます。「補数」と「補数表現」で意味が全く違うのですね。読解力が無くitproが記述された内容では読み取ることができませんでした。本当に助かります。
>>3の補数が7 で
絶対値を使って説明するときに「補数」、
>>7は-3の補数表現
負を含んだ数値を使って説明するときが「補数表現」という言葉を使うということなのでしょうか。
ご回答有難うございます。
>>このようなシステムでは
>>0 →0, 1→1、2→2, 3→3, 4→4
>>5→-5. 6→-4, 7→-3, 8→-2, 9 →-1
9の補数は、1で、その9の補数である1は、-9の補数表現
なので0 →-10, 1→-9、2→-8, 3→-7, 4→-6ではないのでしょうか。
間違っておったらすみません。
ご回答有難うございます。
申し訳ありませんが質問させてください。
①aより大きくないと計算してはならない?
>>X + (-a)<中略>ということがわかります。
この計算式に数値を当てはめてみても文章のようにいきません。
aに9、aの補数に1(9の補数)を当てはめるとX+(-9)、X+1となります。
Xに5を当てはめると5+(-9)=-4、5+1=6で、同じ結果にならないのです。ただ、aである9より大きい数字で計算するとおっしゃる通り同じ結果になります。10+(-9)=1、10+1=11(1)のように。aより大きい数字で計算するのが正解なのでしょうか。
②
>> 0〜(((n^m)/2)-1)を「そのまま」、((n^m)/2)〜((n^m)-1) を「負の補数表現」>>に割り振ります。
n^m-aと似ていますが上記の式は、何を求める式なのでしょうか。
何度もご回答有難うございます。大変助かります。
>>「 10進一桁の世界」 に 「マイナス」記号を持ち込んではいけません。
式の...+(-9)におけるマイナスは、持ち込んでもよいのでしょうか。それとも式は、"気にせず"に結果である-4だけを補数に変換するのでしょうか。
>>合同式
合同式は、ネットで調べたところ、除算と余の式だと書いてありました。
x ≡y(mod n)は、nでxとyを割ると余りが両方とも同じになるもの、x-yがmod nの倍数となる、ということは覚えました。