It seems so strange. I found misunderstanding. I use gcc with char as signed char. I always thought that in comparison expressions(and other expressions) signed value converts to unsigned if necessary.

```
int a = -4;
unsigned int b = a;
std::cout << (b == a) << std::endl; // writes 1, Ok

```

but the problem is that

```
char a = -4;
unsigned char b = a;
std::cout << (b == a) << std::endl; // writes 0

```

what is the magic in comparison operator if it's not just bitwise?