| ア | イ | ウ | エ | オ |
| カ | キ | ク | ケ | コ |
| サ | シ | ス | セ | ソ |
| タ | チ | ツ | テ | ト |
| ナ | ニ | ヌ | ネ | ノ |
| ハ | ヒ | フ | ヘ | ホ |
| マ | ミ | ム | メ | モ |
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ |
| ワ | ヰ | ヴ | ヱ | ヲ |
| ン |
| A | B | C | D | E |
| F | G | H | I | J |
| K | L | M | N | O |
| P | Q | R | S | T |
| U | V | W | X | Y |
| Z | 数字 | 記号 | ||
C/C++の標準で定義されるマクロ定数。char型のビット長を表わす。
limits.h
#define CHAR_BIT 8
必ずしもlimits.h内とは限らないが、limits.hをincludeすれば定義される。
FreeBSDでは、次のように定義される。
machine/_limits.h
#define __CHAR_BIT 8 /* number of bits in a char */
sys/limits.h
#define CHAR_BIT __CHAR_BIT
x86用FreeBSDでは、間接的に8が定義されている。
CHAR_BITはcharのビット長を指す。しかし、longが32ビット長だったとしても、次の例は必ずしも正しくない。
大部分の処理系では有効であり、またこのようにして実装されている処理も大量に存在するが、しかしこれは常に成立することが保障されていない。
つまり、次がいえる。
sizeof(型名) * CHAR_BIT != 有効ビット数
これは例えば、アラインメントの関係でパディング(詰め物)が入った場合に発生しうる。中途半端な長さの型があった場合、これを32ビット境界で整列させたときにはパディングが生じるが、sizeofはパディングも含めたサイズを返す。このため、この計算では有効ビット数が得られないことになる。
移植性を考慮に入れるのであれば、sizeof(型名) * CHAR_BITを有効ビット長として用いるべきではない。
環境依存しないで有効ビット数を求めるには、例えばunsigned longの本当の長さを知りたい場合は、プログラムでビット数を数える以外にはない。
規格で定義されている最大値のマクロ定数を用いれば、環境依存しないものと思われる。
#include <stddef.h> #include <limits.h> size_t bitnum_of_long(void) { unsigned long n = ULONG_MAX; size_t bit; for (bit = 0; n; n >>= 1, ++bit); return bit; }
コメントなどを投稿するフォームは、日本語対応時のみ表示されます