-128〜127、0〜255のビットの動き
char、unsigned charの表現可能な数値の範囲は、
-128 0 127 255 CHAR +++++++++++------------- UCHAR -------------+++++++++++++
charの0〜127がunsigned charの0〜127とビット列を共有しているのは当然ですが、
charの-128〜-1は、unsigned charの128〜255と同じビット列を共有しています。
例えば、上の数直線から見て、続行条件を間違えてループを回すと無限ループになります。
- char型の場合、-128〜127の間をぐるぐる回る。
- unsigned char型の場合、0〜255の間をぐるぐる回る。
以下のビット列のイメージは、well-knownとして頭の中に置いておきたいです。
char | unsigned char | bit | limits.h |
---|---|---|---|
127 | 127 | 0111 1111 | CHAR_MAX |
0 | 0 | 0000 0000 | |
-1 | 255 | 1111 1111 | UCHAR_MAX |
-128 | 128 | 1000 0000 | CHAR_MIN |