匿名回答于2024-05-22 23:18:03
在嵌入式开发中,常常涉及到数据类型的转换。经过比较,将几种经典案例总结如下。欢迎大家交流。
1、int 与 float 的转换
1 int a = 3; 2 int b = 4; 3 float c; 4 c = a/b;
上面代码运行结果为0.000000
int a = 3; int b = 4; float c; c = (float)a/b;
上面代码运行结果为0.750000
1 int a = 3; 2 int b = 4; 3 float c; 4 c = (float)(a/b);
上面代码运算结果为0.000000
1 int a = 3; 2 int b = 4; 3 float c; 4 c = a/(float)b;
上面代码运算结果为0.750000
第一段代码,a为int类型,b为int类型,int类型的除法只保留整数。然后等式右边的数据类型向等式左边的数据类型隐式转换。
第二段代码,将a转为float类型,然后在与b相除。b是int类型,a是float类型。b向a的类型转换。则全部为float类型。故计算结果为浮点型。
第三段代码,使用括号将a/b先运算,由于是整数的除法,所以运算结果为0,又因为等号右边自动向等号左边数据类型转化,最终为0.000000。
第四段代码,将b转为float类型,然后在被a除,int除以float,低类型自动向高类型转换。a/b变为float类型除法。故计算结果为0.000000。
总结:等号右边的数据类型会自动向等号左边的数据类型转换
算式中,若存在数据类型不同的数据,低等级的数据类型自动向高等级的数据类型转换。
匿名回答于2024-05-02 06:48:36
自动转换遵循以下规则:
1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
2) 转换按数据长度增加的方向进行,以保证精度不降低。如int型和float型运算时,先把int量转成float型后再进行运算。
a.若两种类型的字节数不同,转换成字节数高的类型
b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
3) 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
4) char型和short型参与运算时,必须先转换成int型。
5) 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
例如:
int 和double属于不同类型,转换遵循低精度到高精度转换,所以int先转成double型就算,结果就是double型。
匿名回答于2024-05-07 10:10:24