C 言語で数値の 2 進数を表示する
この簡単なガイドは、C 言語を使用した 10 進数から 2 進数へのシステムコンバーターの実装に関するものです。実装に直接ジャンプする前に、まず 2 進数システムを要約し、次に複数の C 実装について説明して、10 進表現を同等の 2 進数に変換します。
2 進数システム
2つの離散状態またはカテゴリ状態で動作するシステムは、バイナリシステムと呼ばれます。同様に、2 進数システムは、1
(1)と 0
(ゼロ)の 2つの記号のみを使用して数値を表します。
したがって、それはベース 2 システムとしても知られています。
現在、ほとんどのトランジスタベースのロジック回路の実装は、個別のバイナリ状態を使用しています。したがって、最新のデジタルコンピュータはすべて、バイナリシステムを使用してデータを表現、保存、および処理します。
たとえば、6
を 2 進数システムに変換します。
$$
(6)_{10} = (110)_2
$$
ここで、6
はベース 10
の 10 進数システムからの番号であり、対応するバイナリはベース 2
のバイナリ番号システムにある 110
です。この変換のプロセスを見てみましょう。
変換のプロセス
ステップ 1:答えを得るために 6 を 2 で割る。この段階で達成された整数指数を使用して、次のステップの配当を取得します。
商がゼロに達するまで、この方法を続けます。
配当 | 残り |
---|---|
6/2 = 3 | 0 |
3/2 = 1 | 1 |
1/2 = 0 | 1 |
ステップ 2:バイナリは、すべての残りを時系列の逆順(下から上)に収集することによって形成できます。
1
が最上位ビット(MSB)で、0
が最下位ビット(LSB)です。したがって、6
のバイナリは 110
です。
変換のための C 実装
C 言語には、数値を 2 進数システムに変換する方法が複数あります。これは、反復的なソリューションでも再帰的なソリューションでもかまいません。
プログラミングの選択次第です。この記事では、非常に単純な再帰的ソリューションについて説明します。
解決策 1:
number>1
の場合:
number
をスタックに配置しますnumber/2
を使用して関数を再帰的に呼び出す- スタックから
number
を取得し、それを 2 で割って、残りを出力します。
#include <stdio.h>
void convertToBinary(unsigned a) {
/* step 1 */
if (a > 1) convertToBinary(a / 2);
/* step 2 */
printf("%d", a % 2);
}
int main() {
// Write C code here
printf("Binary of the number is: ");
convertToBinary(6);
printf("\n");
return 0;
}
このコードスニペットは、次の出力をリリースします。
Binary of the number is: 110
解決策 2:
number>0
かどうかを確認します- 右シフト演算子を 1 ビット適用してから、関数を再帰的に呼び出します。
number
のビットを出力します
#include <stdio.h>
void convertToBinary(unsigned n) {
if (n > 1) convertToBinary(n >> 1);
printf("%d", n & 1);
}
int main() {
// Write C code here
printf("Binary of the number is: ");
convertToBinary(8);
printf("\n");
return 0;
}
指定されたコードスニペットの出力は次のとおりです。
Binary of the number is: 1000
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn