目录
前言
什么是隐式类型转换?什么时候会发生?那些类型可以隐式转换?强制类型转换什么情况必须用?c++与类型转换的4种关键字分别是什么,有什么区别和联系,各在什么场合下使用?等。
本文针对以上问题做简要小结。
同时会涉及到以下内容:
关于printf输出格式与类型不一致,请查看《%d输出float类型,%f输出int类型》
关于符号扩展,有符号与无符号的转换问题,请查看《符号位扩展,空间不足—char和int举例》
1. c的类型转换
1.1 隐式类型转换
隐式类型转换(自动类型转换)的发生:
一.借助"=“,因"="两边类型一致
二.函数调用,传参或返回时(实际上也是借助”=")
三.能够隐式转换的类型:
1.基本数据类型之间。
如:int和double(double->int:可能出现丢失精度的问题)
int和char(int->char:可能出现空间不足,取低位,丢失高位数据1;char->int:会符号位扩展1);
2.通用指针。因所有类型的指针都可转化为通用指针,通用指针也可转化为任意类型的指针
注意:输出格式与类型不一致,不会发生隐式类型转换!
如:printf(“%f,%d\n”, 1, 1.0);2
上代码:
#include<stdio.h>
int main() {
// 隐式类型转换(借助"=",因"="两边类型一致):
// double->int 丢失精度
// int->double
float PI = 3.14159;
int s1, r = 5;
double s2;
s1 = r * r * PI; // 隐式转换,double->int 丢失精度
s2 = r * r * PI;
printf("s1=%d, s2=%f\n", s1, s2);
int a = 5;
double a1 = a/2; // 隐式类型转化,int—>double
double a2 = 2; // 隐式类型转化,int—>double
double a3 = (double)2; // 强制类型转换,int->double;一般采取此种写法
double a4 = (double)a/2;
double a5 = a/2.0;
printf(