C & C++ FAQ
|
|
次のプログラムを考えましょう。
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 10; i++)
printf("文字%cは16進数で%02Xです。\n", '0' + i, '0' + i);
return (0);
}
このプログラムは、文字'0'~'9'の値を16進数の2桁で表示します。
しかし、char型のビット数は処理系によって異なるため、2桁では不足するかもしれません。もしも文字'0'の値が255で、文字'1'の値が256であれば、前者は2桁でFFと表示されますが、後者は3桁で101と表示されることになります。
文字によらず固定した桁数で表示するためには、<limits.h>ヘッダで定義されているCHAR_BITの値をうまく利用しなければなりません。
プログラムは次のようになります。
#include <stdio.h>
#include <limits.h>
int main(void)
{
int i;
for (i = 0; i < 10; i++)
printf("文字%cは16進数で%0*Xです。\n", '0' + i, (CHAR_BIT + 3) / 4, '0' + i);
return (0);
}
■ 根拠 ■
標準C
| §5.2.4.2.1
| Sizes of integral types <limits.h>
|
標準C99
| §5.2.4.2.1
| Sizes of integer types <limits.h>
|
標準C++
| §18.2.2
| C Library
|
■ 参照 ■