微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么当我执行 cout c 时代码给出 -61 的输出,而当我执行 a+b 时给出 195 的输出?

如何解决为什么当我执行 cout c 时代码给出 -61 的输出,而当我执行 a+b 时给出 195 的输出?

我写了下面的代码,我不明白为什么我在 cout

int main() {
char a= 'a';
char b= 'b';
char c= a+b;
cout<<int(a)<<" ";
cout<<int(b)<<" ";
cout<<int(a+b)<<" ";
cout<<int(c)<<" ";
return 0;

}

**OUTPUT**
97 98 195 -61

解决方法

char 类型可以是有符号或无符号的。它由编译器标志调整。 Char 类型在大多数编译器中默认是有符号的,由 8 位组成,1 位用于符号,7 位用于数值。因此,有符号字符表示从 -128 到 127 的数值。这样的一组值是一个环。进一步增加 127 返回-128。

如你所见,97 和 98 是 'a' 和 'b' 的 ASCII 码。在应用运算符之前,任何小于 int 的类型都会被提升为 int,因此 a+b 是 int 195。如果将 195 分配给有符号字符,则会发生有符号值溢出,这被视为未定义行为,因为可以表示有符号值与上面不同。在你的情况下,195 在 68 上超过 127,因为 127+1 是 -128,因此 127+68 127+1+67 是 -128+67 是 -61。

,

C++ 没有 operator+(char,char)。因此,当您添加两个 char 时,参数将提升为 int,结果为 int

使用超出编译器 char 范围(似乎是 int )的 195 (值 char)进一步初始化 -128 c 。 .. 127) 是 C++ 标准未定义的行为。

编译器将其压缩到 char 中并获得值 -61,但您不应依赖该行为。

如果您想要范围内可以包含 195 的 8 位整数,您应该使用 unsigned charuint8_t

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。