The question is within the code.
#include <iostream>
int main()
{
typedef unsigned char uchar;
uchar u = ~uchar();
// The following line, at least using gcc, prints: -1 �
// The rvalue it's printed as a number, and the lvalue as a character.
// What's the explanation of this behaviour for this particular type?
std::cout << ~uchar() << ' ' << u << std::endl;
return 0;
}