[英]Why does an unsigned char return the same value as a signed char in 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时会发生同样的事情,我的理解是签名的变量类型不能容纳与未签名的数据一样多的数据。
当您将cout
和unsigned字符发送给cout
时,它们将被解释为char
。 如果您希望看到不同的结果,请在打印前将这些值转换为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,而未signed char
会打印128
(根据标准,章节4.7,第3节,它是实现定义的)。
( 关于ideone的演示 )。
众所周知,128不是可打印的ASCII码。 所以你的三个陈述中没有一个会得到一个角色。 至少在我的环境中,gcc版本4.1.2,libc6,x86-64
我不认为这是正确的:
signed char sc1 = 128; // overflow.
你好像尝试了某种“未定义的行为”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.