CHAR_BIT |
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS) |
読み:チャー-アンダースコア-ビット |
外語:CHAR_BIT |
品詞:名詞 |
C/C++の標準で定義されるマクロ定数。char型のビット長を表わす。
|
定義 |
limits.h
#define CHAR_BIT 8
必ずしもlimits.h内とは限らないが、limits.hをincludeすれば定義される。
特徴 |
FreeBSD |
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が定義されている。
Linux |
Linuxでは、ユーザー空間ではC標準としてCHAR_BITを定義する。
ただしカーネル空間ではCHAR_BITは定義されていない。
補足 |
有効ビット長 |
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; }
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |