10進数を2進数に変換表示するC言語プログラム

ソースコード

// filename: dtob.c
// convert decimal to binary
#include <stdio.h>
const int BitSize = sizeof(int) * 8; // 整数型のビットサイズを算出
void dtob(int x) {
  int bit = 1, i;
  char c[BitSize];
  for (i = 0; i < BitSize; i++) {
    if (x & bit)
      c&#91;i&#93; = '1';
    else
      c&#91;i&#93; = '0';
    bit <<= 1;
  }
  // 計算結果の表示
  printf("2進数: ");
  for ( i = BitSize - 1; i >= 0; i-- ) {
      putchar(c[i]);
  }
  printf("\n");
}
int main()
{
  int x = 0;
  do {
  printf("10進数を2進数に変換します(0で終了)\n");
  printf("xの値: ");
  scanf("%d", &x);
  dtob(x);
  } while (x != 0);
  return 0;
}

実行結果

$ gcc dtob.c
$ ./a.out
10進数を2進数に変換します(0で終了)
xの値: 5
2進数: 00000000000000000000000000000101
10進数を2進数に変換します(0で終了)
xの値: 8
2進数: 00000000000000000000000000001000
10進数を2進数に変換します(0で終了)
xの値: 100
2進数: 00000000000000000000000001100100
10進数を2進数に変換します(0で終了)
xの値: 256
2進数: 00000000000000000000000100000000
10進数を2進数に変換します(0で終了)
xの値: 1984949894
2進数: 01110110010011111110111010000110
10進数を2進数に変換します(0で終了)
xの値: 0
2進数: 00000000000000000000000000000000
$

ビットが0か1の判断するループ順序を逆にして、配列末尾に’\0’を代入すれば、計算結果の表示は配列の文字列表示ですみます。そうすると「計算結果の表示」の際にforループを使う必要はないなぁ、と書き終わった今思いました(ぇー)。

作成の経緯

以前、拡張ハッシュ法の削除関数を実装している際に、キーをバケットに振り分ける際のアドレス算出の処理部分にデバッグプリントが欲しくて作ったものです。

コメント

  1. […] こちらのサイトを参考にしました(というかほぼ転載)。また、 ビット演算子が分からない方はこちらのサイトを参照してください。 […]