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