BohYoh.comトップページへ
C & C++ FAQ
目次

C C++ int型のビット数を調べる方法を教えてください。

 C言語とC++言語では、各型のオブジェクトが記憶域上に占有するビット数は処理系に依存することになっています。int型のビット数を

sizeof(int) * CHAR_BITS /* 駄目 */

という式で求める方法を見かけることがあります(<limits.h>ヘッダのインクルードが必要です)。しかし、この手法は好ましくありません。たとえば、char型が8ビットで、int型が20ビットである(すなわち2バイト半である)処理系では、上の式で得られる値は24になってしまいます。

C C++

 int型のビット数を求める関数の実現例を以下に示します。

/*--- unsigned型のビット数を返却 ---*/ int int_bits(void) { int count = 0; unsigned x = ~0U; while (x) { if (x & 1U) count++; x >>= 1; } return count; }


C++

 組込み整数型のビット数は、numeric_limitsクラステンプレートのconst int型の静的データメンバdigitsとして提供されます。そのため、以下の式がint型のビット数を表すことになります(<limits>ヘッダのインクルードが必要です)。

numeric_limits<unsigned int>::digits

 < >の中に、符号付きint型ではなく、符号無しint型を指定しているのは、以下の理由によります。

■ 根拠 ■
標準C++ 1st 18.2.1.1 Class template numeric_limits
標準C++ 2nd 18.2.1.1 Class template numeric_limits


戻る

BohYoh.comロゴ