为char分配负值

Nem*_*emo 2 c c++

为什么以下代码打印"?" ?如何将-1分配给unsigned char?

char test;
unsigned char testu; //isn't it supposed to hold values in range 0 - 255?
test = -1;
testu = -1;
cout<<"TEST CHAR = "<<test<<endl;
cout<<"TESTU CHAR = "<<testu<<endl;
Run Code Online (Sandbox Code Playgroud)

Cam*_*ron 11

unsigned简单地影响如何char解释数字的内部表示(s是数字,记住).因此-1,1111 1111在两个补码表示法中,当将unsigned char其意义(对于相同的位表示)更改为255时.

问号可能是您的字体/代码页没有将(扩展的)ASCII值255映射到它可以显示的字符的结果.

我不认为<<在unsigned char和signed char之间进行识别,因为它将它们的值解释为ASCII码而不是普通数字.

此外,它取决于你的编译器是否chars的签名或默认无符号; 实际上,规范声明有三种不同的char类型(plain,signed和unsigned).