有人可以向我解释一下这段代码中发生了什么,C++

时间:2021-01-21 07:19:15

标签: c++

我的意思只是主要功能。我不明白 int(c) when(when 不是代码的一部分) c 是 char。它是如何工作的?

#include <iostream>
using namespace std;

int main()
{
 char c;
 cout << "Enter a character: ";
 cin >> c;
 cout << "ASCII Value of " << c << " is " << int(c);
 return 0;
}

2 个答案:

答案 0 :(得分:3)

有一个表(ASCII 表),它存储了从 int 到 char 的映射(这就是 char 的表示方式)。 char 的 ASCII 值实际上是该表中该 char 的 int 键。将 char 转换为 int - int(c) - 为您提供这个 int 键(c 的 ASCII 值)。

答案 1 :(得分:-4)

<块引用>

谁能向我解释一下这段代码中发生的事情,c++

是的。您首先需要阅读good C++ programming book

然后你可以阅读一些 C++ 标准,可能是 n3337 或更新的。特别是关于强制转换表达式 §5.4。

还查看 this C++ reference 网站。关于explicit casts。出于可读性原因,有些人更喜欢 reinterpret_cast<int>(c) 而不是 (int)c

另请阅读 C 编译器的文档,例如GCC。您可能希望以 g++ -Wall -Wextra -g 的形式调用它。

您还可以运行 g++ -Wall -Wextra -O -fverbose-asm your-code.cc 并查看汇编代码 your-code.s。如果将 (int)c 替换为 reinterpret_cast<int>(c)

,发出的汇编代码可能不会有太大变化

一旦编译器没有给出警告,就使用调试器,例如GDB 以了解您的程序的行为。

您的演员表 (int)c 显示一个整数(例如 65)。没有它,它会显示一个字符(例如 A - 对于 samec - 在您的计算机中 (char)65 -并且在所有矿场中,-无论是在工作中,还是作为 VPS 租用,在我的口袋里-我的手机-,以及在家里-正是文字“A”,除非您的计算机不使用 ASCII 或它的超集 UTF8-。今天这并不常见:很少有计算机使用 EBCDIC。

调试器将为您提供相同的信息,以及逐步运行代码的能力。由于GDB has a step command。所以学习使用 GDB 会让你收获很多。

请注意,在 2021 年 UTF-8 is used everywhere,如果您想接受 µ 或 § 或 é 或 ° 等输入,事情会变得更加复杂。在我的 AZERTY 键盘上,我可以通过一次按键输入。并且 也可以轻松输入...这些字符不是 ASCII

您还可以使用 Clang static analyzer(或者,在 2021 年春季使用 Bismon),以及 Frama-C 的一些 C++ 变体,也许称为 Frama-Clang。 DECODER 项目也很有用。

理论上,A 可能不会被编码为 65。在 1970 年代我在穿孔卡片上编程,当时编码是 EBCDIC。今天,您需要进入计算机博物馆才能找到不将 A 字符编码为 65 十进制数或十六进制 0x41 的计算机。 有些电脑还在使用EBCDIC,但我在本世纪从未见过这样的电脑。