数値を2進数表記で表示
C言語ケーススタディ

Study C Ver2販売開始のお知らせ

 C言語の勉強や教育用に最適です。
 2004/8/23よりStudy C Ver2の販売を開始しました。
 Study C Ver2の新しい機能については
 こちらをご参照ください。

printf関数の書式設定では数値を10進数、8進数、16進数で表示するように指定することができます。

	printf("%d", 10);	10進数で表示
	printf("%o", 8);	 8進数で表示
	printf("%x", 16);	16進数で表示
ただし、これ以外のN進数で表示する機能はありません。 だからといって、5進数で表示といったニーズはほとんど無いと思います。 しかし、2進数で表示したいことは時々あるので、今回は2進数表示プログラムを作成します。

次のプログラムは変数binに格納された値を2進数表記でbuff配列に格納して表示するものです。 Windows9xのコンパイラはint型が32ビットなので結果は32桁の文字列になります。

主な処理としては次のようになります。
(1)32桁分のループで文字を作成していきます。
(2)ループごとに2で割っていきます。
(3)ループごとに2で割ったあまりがその桁の値になります。
(4)2進数の下の桁から評価するのでbuff配列へは反対から(配列の最後から)埋めていきます。


main()
{
	char	buff[32+1];
	int	bin;
	int	i1;

	bin = 128;
	buff[32] = '\0';
	for(i1 = 0; i1 < 32; i1++){
		if(i1 != 0 && bin == 0)
			break;
		if(bin % 2 == 0)
			buff[(32-1)-i1] = '0';        
		else
			buff[(32-1)-i1] = '1';
		bin = bin / 2;
	}
	printf(">>>%s\n", buff+(32-1)-i1+1);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...

通常、2進数は8桁(1バイト分)で扱うことが多いので前のプログラムを改造して8桁分の2進数文字列を作成する関数(bin8)を作ります。
intの値は8桁ずつ4回に分けてbin8関数で処理し表示する必要があります。

bin8関数のポイントは次のようになります。
(1)結果文字列はbin8関数のresult配列に格納します。
(2)result配列はstatic変数にする必要があります。通常の自動変数では関数を終了したときに存在しない領域となってしまいます。
(3)bin8関数の結果は同じ領域に格納されるため連続して呼び出す場合には注意が必要です。
printf("%s %s %s\n", bin8(1), bin8(2), bin8(3));といった使い方はできません。


char	*bin8(int bin);

main(int argc, char *argv[])
{
	int	bin;

        if(argc != 2){
                printf("コマンドの入力形式が間違っています.\n");        
                return;
        }
	bin = atoi(argv[1]);
	printf(">>>%s\n", bin8(bin & 0xFF));
	printf(">>>%s\n", bin8((bin >> 8) & 0xFF));
	printf(">>>%s\n", bin8((bin >> 16) & 0xFF));
	printf(">>>%s\n", bin8((bin >> 24) & 0xFF));
}


char	*bin8(int bin)
{
	static char
		result[10];
	int	i1;

	result[8] = '\0';
	for(i1 = 0; i1 < 8; i1++){
		if(bin % 2 == 0)
			result[(8-1)-i1] = '0';
		else
			result[(8-1)-i1] = '1';
		bin = bin / 2;
	}
	return(result);
}
Study Cにロードする Study Cにロードし編集する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて... 「run 123」のように実行する必要があるので実行ボタンはありません

C言語でゲームプログラマーを目指す方へ
 ■C言語ゲームプログラミング講座
 C言語でのゲームプログラミングを解説する講座
 始めました。

お問い合わせ先 C言語のトップページに戻る Copyright(C) 2003 潟Iーキッド