負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

基本情報技術者試験などでおなじみの「1の補数」や「2の補数」といった補数表現について、今回はそれぞれの仕組みと、計算方法についてご紹介したいと思います。

Show

1.補数表現とは?

1.1 補数表現とは

「補数(complement)」とは、「元の数」と「補数」を足した場合に桁上がりが発生する数のうち「最小」の数のことです。

さらに補数には、「減基数」という考え方があります。こちらは「元の数」と「補数」を足すと桁上がりが発生しない数のうち、「最大」の数が補数となります。

補数といえば一般的には2進数の「1の補数」と「2の補数」が有名ですが、実は全ての「n進数」に補数という概念が存在します。例えば普段使っている10進数にも、「10の補数」と、減基数の「9の補数」が存在します。8進数ならそれぞれ「8の補数」と「7の補数」です。つまりn進数の補数表現には、それぞれ「nの補数」と「(nー1)の補数」が存在するのです。このnは「基数」であり、(n-1)は「減基数」です。

言葉で説明するのは難しいので、実際に10進数で補数を求めてみます。

まず10進数の「10の補数」の場合、お互いに足したら桁が上がる最小の数は10のべき乗です。例えば元の数が1桁であれば10の1乗、3桁であれば10の3乗つまり1000が「元の数」と「補数」を合計した数になります。

・「6」の補数は「4」 (10¹=10)
・「171」の補数は「829」 (10³=1000)

一方「9の補数」の場合、お互いに足しても桁が上がらない数の最大値は、10のべき乗から1を引いた値になります。元の数が1桁であれば10-1=9、3桁であれば1000-1=999が「元の数」と「補数」を合計した数になります。

・「6」の補数は「3」 (10¹-1=9)
・「171」の補数は「828」 (10³-1=999)

なおこの例では基数10のため合計数を10のべき乗で計算していますが、これは他の基数であっても共通の式で表すことができます。

・基数の場合の合計数 = nのm乗
・減基数の場合の合計数 = nのm乗-1

※n進数、かつ元の数の桁数をm桁とする

▲目次へ戻る

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

1.2 補数表現を使うメリット

補数を使うことによってもたらされる最も大きなメリットは、「マイナス記号を使わずに負の数を表現することができる」という点です。

例えば、次のような計算をしたいとします。

1195-171=1024

ところがこの引き算という概念が使えない場合、足し算で同じ計算を行う方法があります。それに活用できるのが10の補数です。

今回は最大4桁の数を計算に使うので、「10000」がベースとなります。よって171の補数は、「9829」です。ここで「171」を引く代わりに、この「9829」を足してみます。

1195+9829=11024

この結果から最上位の桁にある「1」を取り除くことで、答えである「1024」を得ることができました。

常に上手くいくのか不思議に思われるかもしれませんが、式を分解してみると次のようになります。

1195+(10000-171)=10000+1024

このように両辺からそれぞれ+10000を取ると、元の式のままであることが分かります。

▲目次へ戻る

1.3 1の補数と2の補数の違い

前項まででお察しの通り、1の補数と2の補数の違いはそれぞれ基数を使用するか減基数を使用するかという点だけであり、基本となる考え方は同じです。2つの異なる点は、その用途になります。

ここから先は補数の中でも特に情報処理の世界でお世話になることの多い「2進数の補数表現」にスポットをあてて、詳しくご紹介していきたいと思います。

▲目次へ戻る

2.1の補数の計算方法

2.1 1の補数とは

2進数の1の補数とは、(n-1)の補数、つまり減基数を使った補数です。2進数である元の数とこの補数を足し合わせると、10進数の9の補数のケースと同じく、桁が上がらない状態で最も大きな値になります。

▲目次へ戻る

2.2 1の補数の計算方法

1の補数を求めるには実はとても簡単な方法があるのですが、まずは基本の手順を踏んで求めていきたいと思います。

今回は、元の数を7桁の2進数「1001101」とします。

項目1.1の式に当てはめると、この場合n=2、m=7であることから、減基数である1の補数の合計数は

2の7乗-1=127

この「127」をを2進数に変換すると「1111111」になるので、

1111111-1001101=0110010

となり、よって1の補数は「0110010」と求められます。

この結果を見てピンときた方も多いかと思いますが、元の数と補数を並べてみると

元数:1001101
補数:0110010

このように、元の数の0と1を反転したものが1の補数となっていることが分かります。つまり計算しなくても0と1を入れ替えるだけで、1の補数は求めることができるのです。

▲目次へ戻る

2.3 1の補数の使い道

0と1が完全に反転することから、コンピュータ上で「ビット反転」の処理をしたい場合に使用することができます。

▲目次へ戻る

3.2の補数の計算方法

3.1 2の補数とは

2進数の2の補数とは、nの補数、つまり基数を使った補数です。2進数である元の数とこの補数を足し合わせると、10進数の10の補数のケースと同じく、桁が1つ上がります。

▲目次へ戻る

3.2 2の補数の計算方法

2の補数を求める方法について、こちらにもとても簡単な方法がありますが、1の補数と同じくまずは基本の手順を踏んでいきたいと思います。

先ほどと同じく、元の数を7桁の2進数「1001101」とします。

項目1.1の式に当てはめると、この場合n=2、m=7であることから、基数である2の補数の合計数は

2の7乗=128

この「128」をを2進数に変換すると「10000000」になるので、

10000000-1001101=0110011

となり、よって2の補数は「0110011」と求められます。

今回も結果を見てピンときた方がいらっしゃるかと思いますが、前項で求めた1の補数と並べてみると

1の補数:0110010
2の補数:0110011

つまり、1の補数に1を足したものが2の補数であるということが分かります。

これも考えてみると単純で、引き算の引かれる数が2の補数の方がもともと1多いので、引く数が同じなら結果も1多くなるというだけです。

まとめると、2の補数を求める最もかんたんな手順は次のようになります。

(1)元の数の0と1を入れ替える
(2)入れ替えたものに、1を足す

▲目次へ戻る

3.3 2の補数の使い道

項目1.2でも述べたように、2の補数を用いることで「引き算」を「足し算」で表すことができます。ビット反転、足し算共に、コンピュータで様々な機能を実現するためにはなくてはならない考え方です。

▲目次へ戻る

4.補数の本領発揮はビット操作

補数表現のメリットとして引き算を足し算にすることができると書きましたが、普通に引き算すればいいのにわざわざ面倒な計算を増やす必要なんてあるの?と思われるかもしれません。しかしビット操作で成り立っているコンピュータにとっては、とても大事な考え方なのです。

初心者のうちはあまり実戦での親しみはないかと思いますが、より高度なプログラミングに挑戦するようになるといずれお世話になるかもしれません。試験対策の計算丸暗記だけでなく、ぜひ補数の仕組みを覚えておいて下さいね。

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

プロエンジニア編集部

フリーランスITエンジニア専門の案件紹介・転職支援エージェント「プロエンジニア」は、元エンジニアライター、またキャリアコンサルタントの一次情報知見をもとに、執筆・編集をしています。


負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

フリーランス案件を紹介してもらう


基本情報技術者試験でも出題される2の補数

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

2の補数は、基本情報技術者試験でも出題される範囲に含まれている情報処理関連知識として基本的な部分です。

しかし、その独特な考え方や論理からIT技術に触れた経験が少ない方にとっては最初に立ちはだかる難関といえるかもしれません。

ITのことを勉強しない限りは、基本的に触れることのない分野であり、生活を送っている上で役に立つ知識でもありませんし、常識といえるような内容ではないでしょう。

それだけに、情報処理・IT嫌いになるきっかけになり得るかもしれない分野です。

実際、よく分からないという方や難しいと感じられる方もいます。

とはいえ、考え方を理解さえしてしまえばさほど難しいものではありません。

2の補数について解説

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

今回はそんな多くの人を苦しめている「2の補数」について解説していきます。

計算方法や表現範囲はもちろん、1の補数と2の補数の違いにまで注目。

1つずつ細かい部分から「2の補数」への苦手意識を克服していきましょう。

2の補数でできることについても注目しています。

そもそも2の補数とは何なのか

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

それでは順番に2の補数に関する様々な情報を解説していきます。

まずは「そもそも2の補数は何?」というポイントです。

補数表現について

2の補数について知る前に、まず「補数表現」について簡単にチェックしておきましょう。

補数というのは元の数を足したときに桁上がりする「最小」の数のことを指しています。

例えば、10進数の7の補数は3、77の補数は23といった具合です。

先ほど記載した通り「元の数字に足すと次の桁上がりを起こす最小の数字」が「補数」だということが分かります。

減基数の補数

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

また、減基数の補数というものも存在しています。

先ほど解説したのは「基数の補数」。

対して減基数の補数は「元の数に足して桁上がりを起こさない最大の数」のことを指しています。

つまり先ほど例に挙げた7であれば2、77であれば22になるといった具合です。

こちらも仕組み自体は単純ですね。

10進数の場合は9の補数とされています。

2の補数とは

2の補数は、負の数を2進法(2進数)で表す際に用いられる方法です。

そして「ある特定の数字(2進数)のビットを反転させて、1を足したもの」が元の数の2の補数ということになります。

私たち人間が普段利用している10進数(10進法)では、数字の前に-(マイナス)を付けることで負の数字を表現しています。

しかし、2進法は「0」か「1」で数字を表現するため、負の数であることも同様の方法を用いているということです。

端的にいえば、2の補数は先頭ビット(左端)が「1」である場合に、負の数を表すマイナスの役目を担っています。

何のために存在しているのか

そもそも補数表現というのは「マイナスを使わずに負の数を表現できる」というメリットが存在しています。

つまり「引き算を足し算で表現できる」ことに繋がるということです。

これは結果的にビット操作を行うコンピュータにとって処理を軽くすることにも繋がるため、大きなメリットが得られます。

そのために、IT技術や情報処理関連の勉強をし始めると割と最初の段階で「2の補数」が取り扱われているといえるでしょう。

2の補数についてしっかりと理解をしておけば、人間的な感覚ではなくコンピュータ的な感覚、パソコンがどういった仕組みで動いて演算を行なっているのかを理解できます。

2の補数の計算方法

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

それでは早速、2の補数の計算方法を確認していきましょう。

今回は分かりやすくするために、4ビットの2進数で計算例を示していきます。

2の補数計算ステップ1:ビットを反転させる

2の補数を計算する際、最初に行うことは「ビットの反転」です。

例えば、0101という2進数(10進数でいう5)があったとします。

このビットを反転、つまり0と1を入れ替えてみましょう。

すると、結果は1010になります。

2の補数計算ステップ2:反転した2進数に1を足す

さて、先ほどの結果「1010」に対して、続いては「1」を足してみます。

この時計算方法は様々ですが、慣れるまでは10進数に置き換えて計算をすると楽です。

1010を10進数で表すと「10」になるので、1を加算すると結果は「11」になります。

そのため「11」を2進数に変換すれば結果は「1011」です。

この「1011」が「0101」の2の補数であるということになります。

記事中で既に触れた通り、2の補数は「2進数のビットを反転させてそれに1を足した数字」です。

そして、それを求める計算は10進数を経由してしまえば実は結構簡単なものであることが分かるでしょう。

もちろん慣れてきてしまえば、10進数を経由せずダイレクトに2進数同士で計算ができるようになっていくはずです。

2の補数の表現範囲は?

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

さて、2の補数は負の数を表現する手段の1つです。

その2の補数には「表現できる範囲」というものが存在しています。

続いてはその点をチェックしていきましょう。

8ビットの場合の表現可能範囲

一般的に用いられる8ビットの2進数の場合で考えてみます。

8ビットの場合、2の補数表現を用いて表現できる範囲は「-128~127」です。

4ビットの場合の表現可能範囲

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

4ビットでいえば、「-8〜7」を表現できます。

計算は簡単で、ビット数を「n」とした時に「-2^(n-1)〜2^(n-1)-1」の範囲が表現できます。

ビット数をnに当てはめて2のべき乗を行うだけで範囲を求めることが可能です。

実際に計算してみる

文字列で見ると一見複雑に感じるかもしれませんが、実はシンプル。

4ビットの場合であれば、負の数で表現できるのはnにビット数「4」を代入して、-2^(4-1)、つまり-2の3乗となります。

正の数は同様にnに4を代入して、2^(4-1)-1、つまり2の3乗の結果から1を減算した範囲を計算できます。

それぞれを計算すると、結果は「-8」と「7」になりますね。

先ほどお伝えした「-8(-2の3乗)〜7(2の3乗-1)」という結果が得られることが分かります。

2の補数を利用するメリット

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

では一体、なぜ2の補数が利用されるのでしょうか。

それは、先ほど少し触れましたが補数表現を利用すれば「加算で減算が表現できる」からです。

コンピュータの世界において、減算よりも加算の方が処理が軽いため、減算に関しても加算を利用して計算を行います。

では一体、どのように加算で減算を行うのでしょうか。

10進数の減算を補数を用いて加算で表現する

まずは、人間でも分かりやすくするために10進数で計算を行なってみましょう。

サンプルとして「433」を例にしてみます。

例えば、433から114、つまり「433-114」という減算を行いたいとしましょう。

通常このまま計算を行えば、結果は「433-114=319」になりますが、今回はこの結果を補数を用いて加算で求めるのが目的です。

引く数の補数を利用して計算を行います。

引く数である114の補数は、桁上がりする最小の数、つまり886です。

この数字を用いて「433+886」という加算を行ってみると「433+886=1,319」となります。

さて、既にお気付きかとは思いますが、下3桁が通常通り計算した「319」で一致していますね。

この結果を見ると、最上位の桁を取り除けば加算でも減算と同様の結果が得られることが分かります。

2進数で減算を加算で表現する

それでは、2進数の場合はどうなるのでしょうか。

基本的な流れは同様です。

まずは補数を求める

例えば4ビットの「0111(10進数では7)」から「0110(10進数では6)」を引くという場合で考えてみます。

まずは先ほど解説した流れの通り、2の補数を求めていきます。

引く数である0110のビットを反転させて「1001」にし、1を加えると「1010」になります。

これで、引く数「0110」に対応する2の補数が1010であることが求められました。

実際に加算を行ってみる

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

では実際に加算を行います。

0111と1010を加算すると、桁上がりが起きて本来であれば「0111+1010=10001」となります。

しかし桁上がりを無視してみると、結果は「0111+1010=0001」になりますね。

正しい解答が得られていることが分かります。

2進数同士の計算だと分からない方も多いかもしれませんので、10進法で見てみます。

今回行いたかった計算は、10進法でいえば「7-6」です。

そして、最後に得られた桁上がりを無視した解答は「0001」、つまり「1」です。

「7-6」は当然「1」という結果になります。

減算が加算で表現できる

つまり、2進法で2の補数を用いて「減算を加算で表現」した結果は正しいことが分かりますね。

このように、2の補数を用いることで減算の正しい結果を加算だけで得られます。

コンピュータの世界では非常に重要かつ便利な方法だということです。

処理を軽くでき、実行速度も上昇させることに繋がります。

基礎的な部分だからこそ、ITパスポートや基本情報技術者試験といったいわば登竜門的な資格試験の試験範囲に含まれ、問われることの多い分野であるということです。

フリーランス案件一覧はこちら

1の補数との違い

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

さて、2の補数について学んだ方は、知らぬ間に「1の補数」にも触れているということにお気づきの方はいらっしゃるでしょうか。

実は、2の補数を計算する過程で「1の補数」が登場しています。

実はステップ1で登場していた1の補数

それが「ビットを反転させる」という作業です。

先ほど例として出てきた「0101」のビットを反転させると「1010」になりますが、これが1の補数だということになります。

これは「元の数に足して桁上がりを起こさない最大の数」だということも頭に留めておきましょう。

違いはシンプル

1の補数と2の補数の違いはシンプルだということに気づかれた方も多いでしょう。

1の補数は「桁上がりをしない」数、つまり減基数です。

そして2の補数は「桁上がりをする」数になります。

覚え方も単純で「ビット反転したら1の補数」で「ビット反転に1を足したら2の補数」という具合に覚えられるかもしれません。

C言語での補数計算プログラムを組んでみる

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

それでは少し実践的な内容として「プログラム」という観点から「2の補数」をチェックしてみましょう。

C言語を利用した補数を計算するプログラムを組んでみてください。

もしプログラミングを練習中、勉強中という方、特に始めたばかりという方には少し難易度が高い問題かもしれません。

それでも、まずは解答を見ずに自分で解いてみるのが大切です。

じっくりとインターネットや参考書などを利用して調査して組んでみましょう。

試行錯誤しながらでもとにかく問題を解こうとあれこれコーディングするのが、プログラミングの技術やスキルを身に着け、スキルアップするために最も重要なプロセスです。

面倒くさがらずに取り組んでみるのが大切といえます。

2の補数は決して難しいものではない

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

今回の記事では、2の補数という分野について解説をしてきました。

普段の生活ではまず触れることのない2の補数ですが、少し考えてみるとそれほど難しいものではないことが分かったのではないでしょうか。

2の補数は、決して複雑で意味不明なものではありません。

基本的に「2の補数」は僅か2ステップで求めることができます。

まず、求めたい2進数の数字をビット反転(0と1を入れ替える)してください。

そうしたら、ビット反転した数字に「1」を足してください。

この流れは、どんなに桁が多くなっても同じです。

今回の記事では分かりやすくするために4ビットを例えとして利用しましたが、実際には8ビットの2進数を目にする機会が多くなるでしょう。

実際の問題なども8ビットで出題される可能性が考えられます。

それでも、桁数は関係ありません。

「ビット反転して、1を足す」という流れを頭に叩き込んでおきましょう。

2の補数は基本

負の数を2の補数で表す時、8桁の2進数で表現できる数値の範囲を10進数で示したものはどれか?

2進数だけで考えるのが難しければ、10進数を経由しても全く問題ありません。

特に最後の「1を足す」という部分に関しては、10進数を経由した方が分かりやすく間違い防ぎやすい部分ともいえます。

ぜひ躊躇わずに10進数を経由して考えてみてください。

そうすれば、2の補数への苦手意識を減らすことができるでしょう。

2の補数はコンピュータの理論において基礎的な部分ともいえる内容です。

ぜひ今回解説させて頂いた部分や計算方法などを覚え、2の補数の計算方法や、1の補数との違いまで理解を深めておきましょう。

ITフリーランスのための求人・案件情報を提供するわたしたちA-STARでは、単なる案件紹介のみにとどまらず、担当のコーディネーターがひとりひとりに寄り添いながら懇切丁寧に対応させていただきます。

少しでもフリーランスにご興味がありましたら、ぜひお気軽にお問い合わせください。

フリーランス案件を紹介してもらう

負数を2の補数で表すとき、8ビットで表現できる整数の範囲は10進数でどれか。?

負数を2の補数で表すとき8ビットで表現できる整数の範囲は10進数でどれか。 1の補数および2の補数表現できる値の範囲は次のようになります。 したがって、8ビット2の補数表現整数表すとき表現できる値の範囲は-128~127となります。

8桁の2進数の範囲は?

一般に n桁の2進数で表せる数値の範囲は、-2n-12n-1-1 の式で表すことができます。 8桁の2進数で表せる最も小さな数は -28-1=-128(2進数で1000 0000),最も大きな数は 28-1-1=127(2進数で0111 1111)になります。

2の補数の範囲は?

以上のことから,負の数に 2 の補数を使うとき,8ビットの符号付きの整数では -128 ~ 127 の範囲の値が使用できる。 同様に,16 ビットの符号付きの整数では - 215215 -1 の範囲の値が,32 ビットの符号付きの整数では - 231231 -1 の範囲の値が使用できる。

2の補数表現の最大値は?

2の補数表現では、最上位ビットを符号ビットとして用います(0… 非負/1…負)。 nビットであれば、表現できるは-2n-12n-1 - 1であり、16ビットでは-32,768 ~ 32,767です。 絶対最大である数値は、正の最大値ではなく、負の最小である-32,768です。