C++中的基本数据类型主要包括整型、浮点型、字符型和布尔型,这些数据类型之间是可以相互转换的。在《GESP等级考试C++二级-ASCII码与字符》中提到,可以通过显式和隐式两种方式实现ASCII码与字符之间的转换。C++中数据类型之间的转换也可以通过显式和隐式两种方式实现。
1 显式实现数据类型的转换
C和C++中显式实现数据类型转换的方法不同,而C++又是向下兼容C的,因此在C++中可以使用C语言的显式转换方式,也可以使用C++的显式转换方式。
1.1 C语言的显式转换方式
C语言的显式转换方式的格式是“(类型名)(表达式)”,如果表达式中只有一个变量,那么可以不用括号,代码如图1所示。
图1 C语言的显式转换方式的代码
其中,第7行代码将int类型的a1显式转换为double类型;第11行代码将float类型的表达式显式转换为int类型。图1所示的代码运行效果如图2所示。
图2 代码运行效果
1.2 C++的显式转换方式
C++的显式转换方式的格式是“类型名(表达式)”,代码如图3所示。
图3 C++的显式转换方式的代码
其中,第7行代码和第11行代码使用了显式方式对数据类型进行转换。
2 隐式实现数据类型的转换
在赋值或者表达式计算的时候,可以实现隐式数据类型的转换。
2.1 赋值时隐式数据类型的转换
在对变量所赋值的类型与变量本身类型不匹配时,编译器会隐式地对所赋值进行类型转换,使得其与变量类型匹配,代码如图4所示。
图4 赋值时隐式数据类型的转换的代码
其中,第6行代码中,double类型的d1所赋的值是int类型,此时编译器隐式地将int类型转换为double类型;第8行代码中int类型的a2所赋的值是float类型,此时编译器隐式地将float类型转换为int类型,程序运行的效果如图2所示。
2.2 计算表达式时隐式数据类型的转换
一个表达式中可能有多种数据类型,在计算表达式值时,编译器会使用如图5所示的方式进行隐式数据类型转换。
图5 计算表达式时的数据类型转换方式
其中,如果表达式中包含char和short类型的数据,在计算时会将其转换为int类型;如果表达式中包含float类型的数据,在计算式会将其转换为double类型,如图5红框所示;图5中绿框中表示类型转换的高低次序,即如果在表达式中包含了int、unsinged、long和double这四种类型中的两种或者两种以上的数据,会将低次序的数据类型转换为高次序的数据类型,即如果表达式中包含了int、unsinged、long,此时编译器会将int和unsigned数据类型转换为long类型。
图6 计算表达式时隐式数据类型的转换
其中,第6-9行分别定义了short、char、unsinged和double类型的变量,在计算“s1+c1+u1+d1”时,编译器首先将s1和c1转换为int,之后再将int类型和u1转换为double,最后表达式的值是double类型。
3 真题解析
2024-06判断题
答案:×
解析:如果表达式中包含char和short类型的数据,在计算时会将其转换为int类型。因此,在计算该表达式时,’9’会隐式地转换成int类型57,’0’会隐式地转换成int类型49,因此输出应为106。
2024-06判断题
答案:×
解析:使用C++的显式转换,取12.56的整数部分,值为12。
2024-03 判断题
解析:第4行代码中将s显式第转换为int,值为18,因此t的值应该是18+10=28。
2024-03 判断题
答案:错
解析:bool()函数用于将其它数据类型转换为布尔型,将0转换为false,非0值转换为true。因为-1是非0,因此返回true值。
2023-12判断题
答案:×
解析:int(‘9’)将char类型转换为int类型,int(‘9’)的值是字符’9’对应的ASCII码值57,因此该表达式的值是228。
2023-12判断题
答案:×
解析:C++编译器可以将不同数据类型隐式地转换成相同数据类型,因此运算符可以处理不同数据类型。