C言語で10進数を2進数で表示するときに10進数を2進数に変換するために計算を行っていると思いますが、少しの計算でも量が多くなると、時間がかかるようになる?かと思います。しかし共用体を使って、変数に格納された10進数の内部データをビット単位で表示していけば、2進数への変換の計算の時間を省く事が出来るのではないかと思います。間違ってたらすみません。
#include <stdio.h>
#include <conio.h>
struct sample
{
unsigned a : 1;
unsigned b : 1;
unsigned c : 1;
unsigned d : 1;
unsigned e : 1;
unsigned f : 1;
unsigned g : 1;
unsigned h : 1;
unsigned i : 1;
unsigned j : 1;
unsigned k : 1;
unsigned l : 1;
unsigned m : 1;
unsigned n : 1;
unsigned o : 1;
unsigned p : 1;
};
union key_type {
short sh;
struct sample bits;
} key;
int main(void)
{
for (int i = 0; i <= 10000; i++) {
key.sh = i;
printf("\n%dのバイナリコード: ",i);
if (key.bits.p) printf("1");
else printf("0");
if (key.bits.o) printf("1");
else printf("0");
if (key.bits.n) printf("1");
else printf("0");
if (key.bits.m) printf("1");
else printf("0");
printf(" ");
if (key.bits.l) printf("1");
else printf("0");
if (key.bits.k) printf("1");
else printf("0");
if (key.bits.j) printf("1");
else printf("0");
if (key.bits.i) printf("1");
else printf("0");
printf(" ");
if (key.bits.h) printf("1");
else printf("0");
if (key.bits.g) printf("1");
else printf("0");
if (key.bits.f) printf("1");
else printf("0");
if (key.bits.e) printf("1");
else printf("0");
printf(" ");
if (key.bits.d) printf("1");
else printf("0");
if (key.bits.c) printf("1");
else printf("0");
if (key.bits.b) printf("1");
else printf("0");
if (key.bits.a) printf("1");
else printf("0");
printf("\n");
}
return 0;
}
実行結果
0のバイナリコード: 0000 0000 0000 0000
1のバイナリコード: 0000 0000 0000 0001
2のバイナリコード: 0000 0000 0000 0010
~~~~~~~~~~
9997のバイナリコード: 0010 0111 0000 1101
9998のバイナリコード: 0010 0111 0000 1110
9999のバイナリコード: 0010 0111 0000 1111
10000のバイナリコード: 0010 0111 0001 0000