In C, arithmetic is performed at least by size int. This means that it ~0xFCwill return int. Moreover, it is a value 0xFF03that is out of range char(signed or not).
, .
signed char sc = ~0xFC & 0xFF;
, , char (gcc & 0xFF). :
signed char sc = (signed char)~0xFC;
, ,
signed char sc = 3;