スポンサーリンク

c言語で、2進数でprintf出力する自作関数

自作関数で、2進数でprintf出力する関数を作成しました。

ポイントとしては、31bit目から順にprintf出力している箇所です。

ibit目を0bit目にシフトして、1でandをすることで、ibit目を取り出しています。
それを,31bit目から0bit目まで順にprintf出力しています。
また、8bit毎にスペースを入れて見やすくしてみました。

        for(i = BIT32 - 1; i >= 0; i--){
                printf("%d", (n >> i) & 1) ;
                if(i % 8 == 0){
                        printf(" ");
                }
        }

スポンサーリンク

サンプルコード

下記がサンプルコードになります。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>


#define BIT32 (32)

void printBin(unsigned int n){
        unsigned int bin[BIT32] = {0};
        int i =0;       
        
        if(n > UINT_MAX){
                printf("num error\n");
                return;
        }
        
        for(i = BIT32 - 1; i >= 0; i--){
                printf("%d", (n >> i) & 1) ;
                if(i % 8 == 0){
                        printf(" ");
                }
        }
        printf("\n");
}

int main(){
        printBin(UINT_MAX);
        printBin(0);
        printBin(1);
        printBin(2);
        printBin(3);
        printBin(4);
        printBin(7);
        printBin(746);

	return 0;
}

下記が実行結果になります。

$ gcc -o sample sample.c
$ ./sample 
11111111 11111111 11111111 11111111 
00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000001 
00000000 00000000 00000000 00000010 
00000000 00000000 00000000 00000011 
00000000 00000000 00000000 00000100 
00000000 00000000 00000000 00000111 
00000000 00000000 00000010 11101010 

スポンサーリンク