4
#include <iostream>
#include <string>

int main() { 
    char s2;
    s2 = '1' - '0';
    std::cout << s2;
    std::cout << std::endl;
    std::cout << '1' - '0';
    std::cin >> s2;
}

产生的输出是:

☺
1

我的问题是,为什么两条线不同?我期望并希望这两个结果都是1. 根据我的理解,它们应该是相同的,但这显然是错误的,有人可以向我解释一下吗?谢谢

4

3 回答 3

8

为什么两条线不同?

第一个表达式 ( s2) 的类型是char。第二个 ( '1' - '0') 的类型是int

这就是为什么即使它们具有相同的数值,它们的呈现方式也会不同1。第一个显示为ASCII 1,而第二个显示为数字 1。

如果您想知道为什么'1' - '0'给出一个int,请参阅两个字符的加法产生 int

于 2013-03-27T06:46:04.300 回答
1

s2 的类型是charstd::cout << s2将调用std::ostream::operator<<(char)回显一个 ASCII 字符 1(微笑);

'1' - '0' 被解释为一个 int 值,因此std::ostream::operator<<(int)将被调用并打印整数 1。

于 2013-03-27T08:10:13.920 回答
1

s2 是 char,'1'-'0' 是 int。

所以它输入 char 值 1 表示微笑,1 表示 int 值。

于 2013-03-27T06:52:11.757 回答