Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

9の補数と10の補数とは?求め方とC++での実装例をわかりやすく解説

デジタルシステムにおいて、9の補数10の補数は、算術演算を簡単に実行するために使われる重要な概念です。補数を利用することで計算処理が効率化され、通常はハードウェアの負担をプログラム側で補う形として活用されます。

任意の数の9の補数を求めるには、その数を (10n − 1) から引きます。ここで n はその数の桁数です。より簡単な方法としては、与えられた10進数の各桁の数字をそれぞれ9から引くことでも求められます。

10の補数については、まず9の補数さえ求めてしまえば、比較的簡単に導き出すことができます。具体的には、任意の数の9の補数に1を加えるだけで、目的の10の補数が得られます。また、直接10の補数を計算したい場合は、次の式を使います。

10の補数 = 10n − 数(n は桁数)

具体例:10進数 456 の場合

10進数「456」を例にとります。まず、この数の9の補数は以下のように計算できます。

999
−456
_____
543

続いて、この数の10の補数は、9の補数に1を加えて求めます。

543
(+)1
______
544

したがって、結果は以下の通りです。

入力:456
出力:544

数学的な解説

これらの関係は数学的に次のように表現できます。

10の補数 = 9の補数 + 1
10の補数 = 10i − num

ここで、i は num の総桁数を表します。

C++による実装例

以下は、C++を使って10の補数を実際に計算するプログラムの例です。入力された数の桁数を求めた後、公式に基づいて補数を算出しています。

#include <iostream>
#include <math.h>
using namespace std;
int main() {
    int i = 0, temp, comp, n;
    n = 456;
    temp = n;
    while (temp != 0) {
        i++;
        temp = temp / 10;
    }
    comp = pow(10, i) - n;
    cout << comp;
    return 0;
}

このプログラムでは、while文で数値の桁数をカウントし、pow(10, i) によって10のi乗を計算しています。最後に元の数を引くことで、10の補数が求まります。補数の仕組みを理解しておくと、減算回路の設計や符号付き数値の表現など、デジタル回路やコンピュータアーキテクチャの学習にも役立ちます。

  1. C++で10進数を16進数に変換するプログラムの作り方

    10進数の数値が入力として与えられたとき、その数値を16進数に変換するのが本記事の目的です。 コンピュータの世界では、16進数は基数16で表現され、10進数は基数10で表現されます。10進数は0〜9の値を使って表されるのに対し、16進数は0〜15の数字を持ちます。そのうち10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、15は「F」として表されます。 10進数から16進数への変換手順 10進数を16進数に変換するには、以下の手順に従います。 まず、与えられた数値を変換先の基数で割ります。たとえば、6789を16進数に変換する場合、基数である16で6789を割り、商を求め

  2. C++で10進数を2進数に変換するプログラムの書き方

    コンピューターの内部では、すべてのデータが2進数(基数2)として扱われています。一方、私たちが日常的に使う10進数は「0〜9」の数字を組み合わせた基数10の記数法です。この記事では、C++を使って入力された10進数を2進数へ変換するプログラムの考え方と実装方法を解説します。10進数から2進数への変換手順10進数を2進数に変換する基本的な方法は、「2で割った余りを順番に記録していく」ものです。具体的には次の手順で行います。まず、変換したい数値を基数である2で割り、商と余りを求めます。余りが0であればその桁は「0」、1であれば「1」として記録します。続いて、得られた商をさらに2で割り、同じように余