The signed-ness of char is implementation defined - I've known it to go either way.
In this case, Visual C++, char is signed, unless you switch it (Configuration Properties -> C++ -> Language -> Default Char Unsigned).
This code demonstrates that the value 250, when assigned to a char is converted to -6 (2's complement of the unsigned value 250 in 8 bits):
#include <iostream>
int main()
{
char a = 250;
unsigned char b = 250;
signed char c = 250;
std::cout << (int)a << std::endl;
std::cout << (int)b << std::endl;
std::cout << (int)c << std::endl;
}
[EDIT]
Actually, to be clear, a char is not the same as a signed char in VC++ - they are two distinct types that just happen to have similar characteristics. You can test this by making 3 overloaded functions accepting char, signed char and unsigned char:
#include "DarkGDK.h"
void fn(char) { dbPrint( "char" ); }
void fn(unsigned char) { dbPrint( "unsigned char" ); }
void fn(signed char) { dbPrint( "signed char" ); }
void DarkGDK ( void )
{
char a = 1;
unsigned char b = 1;
signed char c = 1;
fn(a);
fn(b);
fn(c);
while ( LoopGDK ( ) )
{
dbSync();
}
}