作者:余小小
日期:2021-10-02
数据类型转换
数据类型,简单的说,其实是在内存中的一个量杯.通过量杯来确定要装入的数据的大小
从而在内存中开辟相关的内存空间
但是我们是多元化的,有时候需要小数,有时候需要整数,有时候有需要字符,那么刚开始定义的数据类型就不再满足我们要求了
这个时候就可以采取数据类型转换来达到我们的需求
数据类型转换分类:
-
自动转换
-
强制转换
自动转换
自动转换,则是c语言由内部机制自动发生的变化,也是对我们的数据进行优化,来让内存空间得到良好的使用.
我们需要明白,知道c语言定义的自动转换规则,这样才不会对我们数据错误的理解.
C 语言中如果一个表达式中含有不同类型数据,在计算时,会将它们自动转换为同一种类型;
在计算时:则是参与四则运算,或者其他的操作运算,关于运算操作,后面详细解释.
要记住:c语言的默认整数类型是int,默认的浮点类型是double
自动转换:由小到大
由小到大:说的是范围,short int long float double,从小的转成大的可以直接转,小杯子中的水用大杯子装也是可以的
int i = 5.5;
/*这里的5.5默认是double类型,
通过C的自动转换机制,会摄取掉小数部分,只保留整数部分*/
自动转换只会在某一大类中自动转换,比如基本数据类型的数据,可以互相转换,转换后还是基本数据类型,那么如果向转成狗仔类型,或者指针类型,就需要使用其他方式了
自动转换规则
浮点数据赋给整数类型,只会保留整数部分;(决定值的是数据类型,而不是值)
#include <stdio.h>
int main()
{
int a = 1.2;
printf("十进制:%d",a);
}
那么我使用%f来占位呢
#include <stdio.h>
int main()
{
int a = 1.2;
printf("十进制:%f",a);
}
发现这里直接打印的double的默认值,浮点型默认是double类型
整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;这里还有一点,默认是float类型,但是实际值是double类型
#include <stdio.h>
int main()
{
int a = 1.2;
float b = a;
printf("b:%f",b);
}
char和short在参与运算的时候,自动提升为int类型
#include <stdio.h>
int main()
{
int a = 1.2;
char b = 2;
printf("a+b=:%d",b+a);
}
浮点型(float或者double)和整型一起运算的时候,默认会提升为浮点型
#include <stdio.h>
int main()
{
int a = 1.2;
char b = 2;
double c = 1.2;
printf("a+b+c=:%f",b+a+c);
}
可以发现,这里的a默认值是int,只保留了整数部分,但是在参与运算的 时候,提升为double,所以是1.0,b也提升为2.0,所以结果是4.2
强制类型转换
有大到小
使用(),在括号里填写需要转换的类型
使用基本数据类型的时候注意,从大范围强制转换为小范围会存在内存溢出的现象
#include <stdio.h>
int main () {
float x = 1.1;
int y = (int)x;
printf( "y的值是:%d\n",y);
return 0 ;
}
但是在clion编译器中,没有强转在编译期间并没报错..
暂无评论内容