【发布时间】:2015-12-23 21:37:48
【问题描述】:
我试图了解代码发生了什么:
cout << '5' - '3';
我打印的是 int 吗?为什么我使用减法运算符时会自动将它们更改为整数?
【问题讨论】:
-
检查ASCII chart 可能是一个好的开始。
我试图了解代码发生了什么:
cout << '5' - '3';
我打印的是 int 吗?为什么我使用减法运算符时会自动将它们更改为整数?
【问题讨论】:
在 C++ 中,字符文字只表示整数值。
像'5' 这样的基本文字表示char 整数值,几乎所有现存的字符编码都是48 + 5(因为字符0 表示为值48,并且C++ 标准保证数字值是连续的,尽管对于字母没有这样的保证)。
然后,当您在算术表达式中使用它们时,或者甚至只写+'5',char 的值将提升为int。或者更准确地说,“通常的算术转换”开始了,并转换为最接近的类型,即 int 或 *更高的类型,可以表示所有 char 值。这种类型的变化会影响例如cout 将显示该值。
* 因为char 定义为单个字节,并且int 不能小于一个字节,并且实际上@987654332 的所有位@ 是值表示位,最多只能在最迂腐的形式中将char 转换为比int 更高的类型。如果这种可能性存在于形式中,那么它就是纯语言律师的东西。
【讨论】:
"Blah"s 创建一个具有该值的std::string。见结尾(en.cppreference.com/w/cpp/language/user_literal)
int 真的可以小于char 吗?
您在这里所做的是从 ASCII 字符 '3' 的值中减去 ASCII 字符 '5' 的值。所以'5' - '3' 等价于53 - 51,结果为2。
【讨论】:
字符的ASCII值为here
C 编程中的每个字符都有一个integer value 来表示它。该整数值称为该字符的 ASCII 值。例如:'a' 的 ASCII 值是 97。例如:如果您尝试将字符 'a' 存储在 char 类型变量中,则存储该字符的 ASCII 值,即 97。
'5' 和 '3' 之间的减法是指它们的 ASCII 值之间的减法。因此,将cout << '5' - '3'; 替换为它们的ASCII 值cout << 53 - 51;。因为 C 编程中的每个字符都有一个integer value 来表示它。
两个整数之间有一个减法运算,所以,它打印一个整数2
【讨论】: