-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と同じビット列を共有しています。

例えば、上の数直線から見て、続行条件を間違えてループを回すと無限ループになります。

  1. char型の場合、-128〜127の間をぐるぐる回る。
  2. 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