【问题标题】:subtracting characters of numbers减去数字的字符
【发布时间】:2015-12-23 21:37:48
【问题描述】:

我试图了解代码发生了什么:

cout << '5' - '3';

我打印的是 int 吗?为什么我使用减法运算符时会自动将它们更改为整数?

【问题讨论】:

标签: c++ string char int


【解决方案1】:

在 C++ 中,字符文字只表示整数值。

'5' 这样的基本文字表示char 整数值,几乎所有现存的字符编码都是48 + 5(因为字符0 表示为值48,并且C++ 标准保证数字值是连续的,尽管对于字母没有这样的保证)。

然后,当您在算术表达式中使用它们时,或者甚至只写+'5'char 的值将提升int。或者更准确地说,“通常的算术转换”开始了,并转换为最接近的类型,即 int*更高的类型,可以表示所有 char 值。这种类型的变化会影响例如cout 将显示该值。


* 因为char 定义为单个字节,并且int 不能小于一个字节,并且实际上@987654332 的所有位@ 是值表示位,最多只能在最迂腐的​​形式中将char 转换为比int 更高的类型。如果这种可能性存在于形式中,那么它就是纯语言律师的东西。

【讨论】:

  • 老鼠。那次编辑使我几乎完成的答案毫无意义。我向你和你的打字速度致敬。
  • @user4581301:谢谢! :)
  • 这是非常有用的!我只是很困惑,因为我看到有人只使用一个字符 - '0'。我猜他们正试图将该角色提升为 int。将其与加号一起使用会起作用还是将它们连接起来?
  • 它会添加字符代码。由于 C++ 从 C 继承了字符串作为简单数组的概念,因此可用于 C 类文字的功能非常少。但是,在 C++14 中,您可以编写例如"Blah"s 创建一个具有该值的std::string。见结尾(en.cppreference.com/w/cpp/language/user_literal
  • int 真的可以小于char 吗?
【解决方案2】:

您在这里所做的是从 ASCII 字符 '3' 的值中减去 ASCII 字符 '5' 的值。所以'5' - '3' 等价于53 - 51,结果为2。

【讨论】:

  • 是的,但没有解释为什么 cout 打印整数 2 而不是不可打印的字符 2。
【解决方案3】:

字符的ASCII值为here

C 编程中的每个字符都有一个integer value 来表示它。该整数值称为该字符的 ASCII 值。例如:'a' 的 ASCII 值是 97。例如:如果您尝试将字符 'a' 存储在 char 类型变量中,则存储该字符的 ASCII 值,即 97。

'5' 和 '3' 之间的减法是指它们的 ASCII 值之间的减法。因此,将cout &lt;&lt; '5' - '3'; 替换为它们的ASCII 值cout &lt;&lt; 53 - 51;。因为 C 编程中的每个字符都有一个integer value 来表示它。

两个整数之间有一个减法运算,所以,它打印一个整数2

【讨论】:

  • 从这个答案中不清楚为什么两个减法是相同的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
相关资源
最近更新 更多