0〜UINT_MAXを2進・8進・10進・16進で表示するプログラム
#include <stdio.h> #include <limits.h> /*--- 整数x中のセットされたビット数を返す ---*/ int count_bits(unsigned x) { int count = 0; while (x) { if (x & 1U) count++; x >>= 1; } return (count); } /*--- unsigned型のビット数を返す ---*/ int int_bits(void) { /* 整数x中のセットされたビット数 */ return (count_bits(~0U)); } /*--- unsigned型のビット内容を表示 ---*/ void print_bits(unsigned x) { int i; /* unsigned型のビット数 */ for (i = int_bits() - 1; i >= 0; i--) putchar(((x >> i) & 1U) ? '1' : '0'); } int main(void) { unsigned i; // int型は不可 for (i = 0; i < UINT_MAX; i++) { /* unsigned型のビット内容を表示(2進) */ print_bits(i); printf(" %6o %5u %4X\n", i, i, i); // 8進・10進・16進 } return (0); }
実行結果
00000000000000000000000000000000 0 0 0 00000000000000000000000000000001 1 1 1 00000000000000000000000000000010 2 2 2 00000000000000000000000000000011 3 3 3 00000000000000000000000000000100 4 4 4 00000000000000000000000000000101 5 5 5 00000000000000000000000000000110 6 6 6 00000000000000000000000000000111 7 7 7 00000000000000000000000000001000 10 8 8 00000000000000000000000000001001 11 9 9 00000000000000000000000000001010 12 10 A 00000000000000000000000000001011 13 11 B 00000000000000000000000000001100 14 12 C 00000000000000000000000000001101 15 13 D 00000000000000000000000000001110 16 14 E 00000000000000000000000000001111 17 15 F 00000000000000000000000000010000 20 16 10 00000000000000000000000000010001 21 17 11 00000000000000000000000000010010 22 18 12 00000000000000000000000000010011 23 19 13 00000000000000000000000000010100 24 20 14 00000000000000000000000000010101 25 21 15 00000000000000000000000000010110 26 22 16 00000000000000000000000000010111 27 23 17 (。。。略)
整数を8進で出力するには
変換指定は%o
整数を16進で出力するためには
小文字で出力したい時は、変換指定を%xにする。
大文字で出力したい時は、変換指定を%Xにする。