According to "The C++ Programming Language" by Bjarne Stroustrup, char is "implementation defined". It can be signed char or unsigned char depending on implementation. You can check whether char is signed or not by using std::numeric_limits::is_signed.