问题描述
我的意思只是主要功能。我不明白 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;
}
解决方法
有一个表(ASCII 表),它存储了从 int 到 char 的映射(这就是 char 的表示方式)。 char 的 ASCII 值实际上是该表中该 char 的 int 键。将 char 转换为 int - int(c)
- 为您提供这个 int 键(c 的 ASCII 值)。
谁能向我解释一下这段代码中发生的事情,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
- 对于 same 值 c
- 在您的计算机中 (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,但我在本世纪从未见过这样的电脑。