2013-03-27 64 views
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; 
} 

输出产生的是:减去2个字符,并把它们添加到字符串

☺ 
1 

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

回答

8

为什么两条线不同?

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

这就是为什么他们呈现不同,即使他们有相同的数值,1。而第二显示为数字1

如果你想知道为什么'1' - '0'给出了一个int,见Addition of two chars produces int

+0

如何让char(s2)成为char''1''? – 197 2013-03-27 06:47:46

+0

@ 197:将“0”加入它。或者,如果只是输出,则将其转换为“int”。 – NPE 2013-03-27 06:49:07

+0

@ 197你把它转换成int。 – jrok 2013-03-27 06:49:10

1

s2为炭,第一显示为ASCII 1,“1” - “0”为int 。

因此它键入的是1的笑容值和1的int值。

1

s2的类型为char,std::cout << s2将呼叫std::ostream::operator<<(char)以回应ASCII字符1(微笑);

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

相关问题