Question: How C++ handles cout of negative value of signed char? Is the behavour defined in C++11 standard? I am using MinGW C++ 11 compiler. It looks the signed value is converted to unsigned type by adding 256 and then prints extended ASCII characters. 

```
signed char a=-35;
std::cout<<a;

```

Answer: 
According to [this](http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2), the following overload is selected:

```
template< class Traits >
basic_ostream<char,Traits>& operator<<( basic_ostream<char,Traits>& os,
                                        signed char ch );

```

And since `signed char` is not `char`, `a` is first converted to a `char` using [`widen`](http://en.cppreference.com/w/cpp/io/basic_ios/widen):

```
char_type widen( char c ) const;

```

So your code is equivalent to:

```
std::cout << std::cout.widen(c);
// or:
std::cout << std::use_facet< std::ctype<char> >(getloc()).widen(c)

```

As you can see, `widen` takes a `char`, so you'll have a conversion from `signed char` to `char` prior to the actual "widening". 

Even if you are widening from a `char` to a `char`, the behavior is implementation-defined — The standard makes no guarantee regarding this.
Use type casting to `int`...

```
std::cout << (int)a;

```

...or, following better C++ programming style (as Christian Hackl suggested):

```
std::cout << static_cast<int>(a);

```

This actually does not answer your questions (already been answered by Holt), but shows a solution to the problem.