我的印象是两者都会设置为不同的值,但这三件事都输出完全相同的字符。是否存在某种隐式转换或什么?
unsigned char unsc1 = 128;
std::cout << "Unsigned Char 1 = " << unsc1 << std::endl;
signed char sc1 = 128;
std::cout << "Signed Char 1 = " << sc1 << std::endl;
char c1 = 128;
std::cout << "Char 1 = " << c1 << std::endl;
当两者都设置为254时会发生同样的事情,我的理解是签名变量类型不能保存与未签名的数据一样多的数据。
答案 0 :(得分:3)
当您将有符号和无符号字符发送到char
时,它们将被解释为cout
。如果您希望看到不同的结果,请在打印前将这些值投射到int
:
unsigned char unsc1 = 128;
std::cout << "Unsigned Char 1 = " << (int)unsc1 << std::endl;
signed char sc1 = 128;
std::cout << "Signed Char 1 = " << (int)sc1 << std::endl;
现在可能在所有现存的平台上signed char
将打印-128,而无符号的平台将打印128
(根据标准,章节4.7,第3节,它是实现定义的)。 / p>
答案 1 :(得分:0)
众所周知,128不是可打印的ASCII码。所以你的三个陈述中没有一个会得到一个角色。至少在我的环境中,gcc版本4.1.2,libc6,x86-64
答案 2 :(得分:0)
我不认为这是正确的:
signed char sc1 = 128; // overflow.
您似乎尝试了某种“未定义的行为”。