|
#define CHAR_BIT 8必ずしもlimits.h内とは限らないが、limits.hをincludeすれば定義される。
#define __CHAR_BIT 8 /* number of bits in a char */sys/limits.h
#define CHAR_BIT __CHAR_BITx86用FreeBSDでは、間接的に8が定義されている。
sizeof(long) * CHAR_BIT == 32 /* ? */大部分の処理系では有効であり、またこのようにして実装されている処理も大量に存在するが、しかしこれは常に成立することが保障されていない。
sizeof(型名) * CHAR_BIT != 有効ビット数これは例えば、アラインメントの関係でパディング(詰め物)が入った場合に発生しうる。中途半端な長さの型があった場合、これを32ビット境界で整列させたときにはパディングが生じるが、sizeofはパディングも含めたサイズを返す。このため、この計算では有効ビット数が得られないことになる。
#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; }