8 bit declaration
As far as I know, sizeof(char) == sizeof(unsigned char) == 1 Byte. It is directly stated somewhere in C language norm, where - if I remember it correctly - char/uchar is the only type defined by its size. (Another types are defined with the help of "<=" and/or "==".)
From it follows, that the maximum value in unsigned char is always 0xff (interpreted by the compiler), but it does not mean, that one char allocate 1 Bytes only, because usually all variables on 16/32bits systems are WORD/DWORD aligned and thus 1 Byte of data (char) is padded with some "unused space". It is not a rule, because it is a system dependent feature, but there is usually significant speed penalty, if the variable is not "correctly" aligned.