为什么unsigned char在c ++中返回与signed char相同的值?

时间:2014-06-29 23:55:28

标签: c++

我的印象是两者都会设置为不同的值,但这三件事都输出完全相同的字符。是否存在某种隐式转换或什么?

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时会发生同样的事情,我的理解是签名变量类型不能保存与未签名的数据一样多的数据。

3 个答案:

答案 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>

demo on ideone)。

答案 1 :(得分:0)

众所周知,128不是可打印的ASCII码。所以你的三个陈述中没有一个会得到一个角色。至少在我的环境中,gcc版本4.1.2,libc6,x86-64

答案 2 :(得分:0)

我不认为这是正确的:


signed char sc1 = 128;  // overflow.

您似乎尝试了某种“未定义的行为”。