这段 static_cast 代码有什么问题?
what is wrong this static_cast piece of code?
我在c++中有这段代码
char a;
cin>>a; //I input 3 in this
a=static_cast<int>(a);
cout<<a+9<<endl;
a=static_cast<int>(4.2)
cout<<a;
结果如下:
51
60
4
我原本希望 static_cast(a) 产生 3。谁能告诉我我误解了什么?
让我们一步一步来。
char a;
声明一个字符类型。到目前为止,一切都很好。
cin>>a;
输入字符或数字的文本表示。如果您输入“3”,您将输入 3 的文本版本。在 ASCII 系统上,这将是 0x33(或十进制的 51)。
a=static_cast<int>(a);
顺便说一下,这条语句前面的a
中的值是一个数字(你输入的字符的ASCII码)。
您是在告诉编译器将整数类型 char
转换为整数类型 int
。 (您正在从较小容量的整数类型转换为较大容量的整数类型)。 接下来,您将 int
type 赋值给char
类型。 (您正在从容量较大的类型 int
转换为容量较小的类型 char
。) 由于它们都是数字,因此基本上没有任何反应。编译器可能会对此进行优化。
cout<<a+9<<endl;
您将字符 a
中的字符推进 9 编码。如果您输入字符 'A',您现在将得到 'J'(根据 ASCII)。然后输出字符和换行符。
a=static_cast<int>(4.2)
此处,您正在将 浮点数 转换为 整数 。浮点数被截断为 4。接下来,值 4 (0x04) 的长度被截断以适合 char
类型并分配给变量 a
.
cout<<a;
这一行输出字符\x04
。在 ASCII 中,这是一个不可打印的字符,EOT
。
您可能需要的是从字符串到整数或从整数到字符串的转换。
记住在大多数文本编码系统上 4 != '4'。
我在c++中有这段代码
char a;
cin>>a; //I input 3 in this
a=static_cast<int>(a);
cout<<a+9<<endl;
a=static_cast<int>(4.2)
cout<<a;
结果如下: 51 60 4
我原本希望 static_cast(a) 产生 3。谁能告诉我我误解了什么?
让我们一步一步来。
char a;
声明一个字符类型。到目前为止,一切都很好。
cin>>a;
输入字符或数字的文本表示。如果您输入“3”,您将输入 3 的文本版本。在 ASCII 系统上,这将是 0x33(或十进制的 51)。
a=static_cast<int>(a);
顺便说一下,这条语句前面的a
中的值是一个数字(你输入的字符的ASCII码)。
您是在告诉编译器将整数类型 char
转换为整数类型 int
。 (您正在从较小容量的整数类型转换为较大容量的整数类型)。 接下来,您将 int
type 赋值给char
类型。 (您正在从容量较大的类型 int
转换为容量较小的类型 char
。) 由于它们都是数字,因此基本上没有任何反应。编译器可能会对此进行优化。
cout<<a+9<<endl;
您将字符 a
中的字符推进 9 编码。如果您输入字符 'A',您现在将得到 'J'(根据 ASCII)。然后输出字符和换行符。
a=static_cast<int>(4.2)
此处,您正在将 浮点数 转换为 整数 。浮点数被截断为 4。接下来,值 4 (0x04) 的长度被截断以适合 char
类型并分配给变量 a
.
cout<<a;
这一行输出字符\x04
。在 ASCII 中,这是一个不可打印的字符,EOT
。
您可能需要的是从字符串到整数或从整数到字符串的转换。
记住在大多数文本编码系统上 4 != '4'。