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

Why is '1' + '1' = 98 and '1' + 1 = 50?

本文关键字:为什么      更新时间:2023-10-16

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

我使用本地或在线口译员,但我总是得到这个结果。

我想这个结果是因为 '2' 在 ASCII 中5098'b'但我不确定。我也不太明白转换是如何工作的。

代码在这里:

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

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

简而言之,值就是值,无论是通过字符文本还是整数文本表示。

'1'是一个

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

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

请注意,在 C 中,'1'int类型。可以说,这比C++的方式更不令人困惑。