这个static_cast代码有什么问题?

时间:2016-04-25 13:51:07

标签: c++ static-cast

我在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.有谁能告诉我我误解了什么?

1 个答案:

答案 0 :(得分:2)

让我们一步一步走。

char a;

声明字符类型。到现在为止还挺好。

cin>>a; 

输入字符或数字的文字表示。如果输入“3”,则输入文本版本3.在ASCII系统上,这将是0x33(或十进制数51)。

a=static_cast<int>(a);

顺便说一句,此语句前a中的值是一个数字(您输入的字符的ASCII号)。

您告诉编译器将整数类型char转换为整数类型int(您正在从较小容量的整数类型转换为较大容量的整数类型)。接下来,您将int 类型分配到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'。