The book is wrong. The standard does not specify if plain
char is signed or unsigned.
In fact, the standard defines three distinct types:
signed char, and
unsigned char. If you
#include <limits.h> and then look at
CHAR_MIN, you can find out if plain
CHAR_MIN is less than 0 or equal to 0), but even then, the three types are distinct as far as the standard is concerned.
Do note that
char is special in this way. If you declare a variable as
int it is 100% equivalent to declaring it as
signed int. This is always true for all compilers and architectures.