繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM