为什么'1'+'1'= 98而'1'+ 1 = 50?

时间:2018-03-13 12:26:54

标签: c++ c++11 ascii

我来自高级语言,PHP js和东西。所以这对我来说很奇怪。

我正在使用本地或online解释器,但我总是得到这个结果。

我认为这个结果是因为'2'50,而98'b',但我不确定。另外,我真的不明白转换是如何工作的。

代码在这里:

#include <iostream>
#include <string>
int main()
{
    std::cout << '1' + 1 << '\n';
    std::cout << '1' + '1' << '\n';
}

2 个答案:

答案 0 :(得分:6)

Type char是整数类型。每个字符映射到一个整数值。该值取决于所使用的编码,在您的情况下可能是ASCII。因此,字符'1'可能具有49的整数值,因此'1' + '1' expression等同于49 + 49,并产生98。将1的整数值添加到49会产生50。这与将1的整数值添加到(由'1'表示的值相同。

简而言之,值是值,无论是通过character literals还是integer literals表示。

答案 1 :(得分:5)

'1'char常量,其特定值由系统上使用的 encoding 确定。该编码可能是ASCII,但可能不是。当用作+的参数时,它会被提升为int。因此decltype('1')char,但decltype('1' + '1')int

在您的系统上,很明显'1'的值为49.这就是'1' + '1'为98的原因。因此'1' + 1为50。

请注意,在C中,'1'int类型。可以说,这比C ++的方式更容易混淆。