简单的C++类型转换程序

Simple C++ type conversion program

本文关键字:程序 类型转换 C++ 简单      更新时间:2023-10-16

我正在学习C++,并且正在研究安全和不安全的转换。这是我的代码:

#include <iostream>
using namespace std;
int main()
{
    double d = 0;
    while( cin >> d )
    {
           int i = d; // try to squeez in a double into an int
           char c = i; // try to squeez in an int into a char
           int i2 = c; // try to get the integer value of the char
           cout << "d == " << d << "n"
                << "i == " << i << "n"
                << "c == " << c << "n"
                << "i2 == " << i2 << "n";
    }
    return 0;
}

当我输入 3 时,我得到以下内容:

d == 3
i == 3
c == a heart shape
i2 == 3

为什么c打印出这样的听觉形状:链接

因为心形字符是 PC 版 ASCII 表中值为 3 的符号。 这是一个列表: http://www.ascii-codes.com/. 你可能会发现其他很好的代码在那里,假设你的程序在那个环境中运行。

从 i 到 c 分配的值 3 被截断为字符的宽度。然后,它表示 ascii 字符 Ctrl-C 或 ETX (0x03(,它通常不是可打印字符。但是,许多终端类型无论如何都会尝试打印某些内容。根据您的终端,它可能会打印为心形。如果不知道终端的字符编码及其设置,就很难确切地说出为什么它打印为心形。

虽然char是整数类型,但ostream(cout的类型(将其视为特殊。它将其打印为单个字符而不是数字。

如果您不希望这样做,只需通过写int(c)而不是c来"强制"将其打印为数字。

当您以有关安全和不安全转换的问题开始提问时,我将添加一条评论:int(c)(int)c不同,您也会经常看到(可悲的是(。在这种情况下(使用int(,它具有相同的效果,但具有不同的语义。第一个从现有的char值构造一个int值。第二种是使用 C 样式强制转换的不安全转换,这应该在C++中避免,因为它会首先杀死您通过 C++ 获得的所有类型安全性。

对于"d",您将输出一个双精度,该双精度值将转换为以二进制格式表示双精度值内容的字符串。整数(您的 i 和 i2(也会发生同样的情况。

字符被发送到屏幕而不被转换,即被发送。Char 3,如果你在 ASCII 表中查找,并不真正代表任何东西 - 可打印的字符从 32 开始。所以,你会得到一个"奇怪"的角色。

您看到的不可打印字符的呈现由值"3"的字符表示。

在代码中,变量 c 的值为 3。 这实际上是 ASCII 集中的"非打印控制字符"。 (字符"3"是 ASCII 33(。

它在尝试打印时具有心形符号的表示形式。