-
一种是自动转换,另一种是强制转换。
自动转换 当不同数据类型的数量混合在一起时,就会发生自动转换,并由编译系统自动完成。 自动转化遵循以下规则:
1.如果计算类型不同,则首先将它们转换为相同的类型,然后进行计算。
2.转换在增加数据长度的方向上进行,以确保精度不降低。 例如,在计算 int 类型和 long 类型时,先将 int 量转换为 long 类型,然后进行计算。
3.所有浮点运算都以双精度执行,甚至仅包含浮点单精度运算的表达式也必须在计算前转换为双精度。
当 type 和 short 类型参与计算时,必须首先将它们转换为 int 类型。
5.在赋值操作中,当赋值编号两侧的量的数据类型不同时,赋值编号右侧的数量类型将转换为左侧数量的类型。 如果右边的数据类型长度在左边很长,就会丢失一部分数据,这会降低准确性,缺失的部分会向前舍入。
当参与算术运算或比较运算的两个操作数不属于同一类型时,将简单类型转换为复杂类型, char(short) -int(long) -float ->double
以下程序段表示自动类型转换的规则。
void main(){
float pi=;
int s,r=5;
s=r*r*pi;
printf("s=%d",s);
pis<--r*r*pi
显示程序运行的结果:
float pi=;
int s,r=5;
s=r*r*pi;
在此示例中,pi 是实数类型; s,r 是一个整数。 当执行 s=r*r*pi 语句时,r 和 pi 都转换为 double,结果也是 double。 但是,由于 s 是整数,因此赋值结果仍然是整数,并且小数部分四舍五入。
-
3.所有浮点运算都是以双精度执行的,即使只有具有浮点单精度运算的表达式,并且 type 和 short 类型必须转换为 int 才能参与操作。 5.在赋值操作中,将赋值。
-
如果答案是 double,我认为 10 是 float,2 是 int,float 会自动水平转换为 double,int 会自动转换为 double,所以结果是 double。
-
我同意房东的观点,这是双重类型。 在 (float)10 2 中,类型转换优先于除法运算,因此表达式变为,在此表达式中,被除数类型的除数不一致,并且都是双精度类型,因此结果是双精度类型。
-
不,(float)10 2,整个表达式是 float。
-
怎么可能是double类型呢,指定为float类型。。。
-
谁告诉你它是双倍的,结果仍然是浮动的,我用以下程序验证了它:
#include
main()
double 类型数据为 8 字节,float 类型数据为 4 字节,该程序的输出为 4。
但是,计算机在处理的时候,在计算之前确实会同时将int和float转换为double,但是为了提高计算过程的准确性,它会自动转换回来,即使是float+float这样的情况,它实际上是double+double。
-
10 正在塑造。
a'虽然它是 char 类型。 Bei 用作参与操作的整数。
i*f 也应该是两个整数运算。
这取决于 i 和 f 的数据类型。
如果其中任何一个是浮动的。
整个表达式的值将转换为浮点数。
如果我都在塑形。
表达式或整数。
-
放'a'改成ASCII码97,然后按照四大操作法则计算,至于i、f、d的值,房东自己都知道。
-
int a ;a=10/
因为a是整数,所以不能保存浮点数,赋值时只强制转换整数部分。
所以 a=3float a ; a=10/3;
10 3 这里的除法符号是可整除的,10、3 是可整除的,所以如果你想要 a= 的话,除法的结果是 3a=3
它应该写成 a= 或 a=10
或 a=,即两者中至少有一个是浮点数,即浮点数的除法。
你明白吗?
-
类型不同。 第一个是int类型,第一个是浮点类型的运算,10被强制转换,除以得到,强制转换给int类型,a=3
第二个是浮点型,先是 10 3=3,然后强制转换为浮点型,2=
-
一个是 int(不带小数点),另一个是单精度浮点数(带小数点)定义。 输出也不同。 将 a 定义为 int 类型以获取答案 3,将 a 定义为浮点类型以获取答案。
一般来说,它不能是int a; a=10/;由于将 a 定义为整数,因此还需要一个浮点常量。 这是不对的。
-
结果是一样的,但意思却大不相同!
第一个是int类型,第一个是浮点类型的运算,10被强制转换,除以得到,强制转换给int类型,a=3
第二个是浮点型,先是 10 3=3,然后强制转换为浮点型,2=
-
按位运算符仅用于整数。 float 必须转换为整数,否则编译将无法通过。
int x=2,z;
float y = ;
z = x & int) y;这可以通过编译来完成。 不会有自动转换。 否则,“非法”操作数的数量将出现错误。
printf("%x",z);
-
float)10 是一个值为 10 的 int(整数),然后将 int 强制转换为 float。
它本身就是一种单精度浮点类型。
而 int 到 float 是一种显式转换(即小存储容量数据类型。
转换为大存储容量的数据类型,该过程不会造成数据丢失),但浮点数本身存在准确性问题,两者在参与操作上其实是有区别的。
-
括号更改操作的优先级。
float)a b 是第一个 (float)a 将 a 从 int 转换为 float,则小数部分的值将保留在后续的除法运算中。
而(float)(a b)是先计算a b的值,因为a和b都是int类型,所以结果只取int类型部分,即忽略小数部分,然后把结果转换成float类型,值不变。
-
加括号会先计算一个 b,然后得到一个 int,这个 int 四舍五入了很多,所以是错误的。 浮点除法是不带括号的,因为 a 变成了浮点。