【问题标题】:Can someone explain to me whats happening in this code step by step, c++ [duplicate]有人可以一步一步地向我解释这段代码中发生了什么,c ++ [重复]
【发布时间】:2021-04-25 14:16:59
【问题描述】:

我的意思只是主要功能。我不明白 int(c) 何时(何时不是代码的一部分)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;
}

【问题讨论】:

  • 请打开你的课本中关于conversionstype cast的章节。
  • 它使用char的encoding将char转换为整数,然后输出整数。关于ASCII 的那一点是一个bug,C++ 不需要使用ASCII。

标签: c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    还可以查看this C++ reference 网站。关于explicit casts。出于可读性的原因,有些人更喜欢reinterpret_cast&lt;int&gt;(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&lt;int&gt;(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,但是我这个世纪还没有遇到过这样的电脑。

    【讨论】:

    • 这是一个有很多链接的通用答案。根本不回答问题
    • 我提到了具体程序和实际值。
    • 刚刚看到。它淹没在如此多不相关和垃圾邮件的链接中(很抱歉,但你在很多答案中一直提到你的工具),它并不是真的有用。那 5 次反对票肯定意味着什么。再加上它是一个超级重复,你投票结束,你有 200k+ 代表,所以回答这些问题可能不是真的必要
    • 问这个问题是不必要的。我没问!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多