(float)10/3的运算顺序 是先转换 还是算完之后在转换

供稿:hz-xin.com     日期:2025-01-14
关于类型转换

i=10+'a'+1.5*5-10/3;

看情形,同运算顺序有关
(顺序1) 1.5*5 转换成float做乘法 [先乘除]
(顺序2) 10/3 int除int [先乘除]
(顺序3) 10+'a' 转换成 int
(顺序4) 转换 (1) 的float 结果 成 int 结果
(顺序5) 3的结果,4 的结果, 2的结果 都是 int ,得最后结果

另外,有可能 同编译器 编译时选择的优化级有关。

这两个结果相同(证实顺序2是int除int ):
i=10+ 'a'+1.5*5-15/4;
i=10+ 'a'+1.5*5-15/5;

这两个结果不同(证实顺序1是float乘法):
i=10+ 'a'+1.1*5-15/5;
i=10+ 'a'+1.4*5-15/5;

我与楼主的观点一致,是double型。在(float)10/2中,类型转换优先于除运算,因此表达式变为10.0/2,在这个表达式中,被除数除数类型不一致,都向double型化,因此结果是double型。

一种是自动转换,一种是强制转换。

自动转换

自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:

1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。

2.转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。

3.所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。

4.char型和short型参与运算时,必须先转换成int型。

5.在赋值运算中,赋值号两边量的数据类型不同时, 赋值号右边量的类型将转换为左边量的类型。 如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度, 丢失的部分按四舍五入向前舍入。

当参加算术或比较运算的两个操作数类型不统一时,将简单类型向复杂类型转换,
char(short) -> int(long) -> float -> double

下面程序段表示了类型自动转换的规则。

void main(){
float PI=3.14159;
int s,r=5;
s=r*r*PI;
printf("s=%d\n",s);
} PI<--3.14159
s<--0,r<--5
s<--r*r*PI

显示程序运行结果:

float PI=3.14159;
int s,r=5;
s=r*r*PI;

本例程序中,PI为实型;s,r为整型。在执行s=r*r*PI语句时,r和PI都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。

3.所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,4.char型和short型参与运算时,必须先转换成int型。 5.在赋值运算中,赋值

如何用C语言计算10除以4等于2.5
y即除数与被除数*\/ z=x\/y;\/*求出z*\/ printf("%f",z);\/*输出z*\/ printf("Continuation:(Y\/N)");\/*循环是否继续,n为中断*\/ scanf("%c",&tx);\/*输入tx的值*\/ } } 下面这个是直接输出(仅适合固定数值)main(){ printf("%f",10.0\/4.0);printf("%f",10.0\/3.0);} ...

程序运行后半段不能运行
float score[10][3],但是,你在使用时,却使用了score[10][3],已经超出己定义的内存空间。scanf("%f",&score[i][j]);执行时可能会改变内存的关键部分。for(i=0;i<=9;i++){ for(j=0;j<=2;j++)这样就对了,或者这样也行:for(i=0;i<10;i++){ for(j=0;j<3;j++)...

c语言中什么是单精度型和双精度型???各举个例子。。。
单精度型和双精度型的区别在于它们的精确程度不一样,也就是小数部分的有效位数不一样。单精度数(float型)在32位计算机中存储占用4字节,也就是32位,有效位数为7位,小数点后6位;双精度数(double型)在32位计算机中存储占用8字节,也就是64位,有效位数为16位,小数点后15位。比如3....

大家帮帮忙吧,我晚上六点要考试,C语言!救人一命胜造七级浮屠!高分悬赏...
3.C语言中数组名是一个( 字符指针类型 )常量,不能对它进行赋值运算。4.printf(“%5.3f\\n”,123456.12345);输出为( 123456.123 )5.写出满足:x的值大于100时,以十进制整型输出x的if语句时:( if(x>100) printf("%d", x); )6.表达式10\/3的值为:( 3 )7....

C语言10\/3.0*3的结果为什么是10.0
里面有个 3.0 ,系统自动变为浮点型运算了,计算机是的 1\/2 1\/4 1\/8。。。 来储存浮点数的,到一定的精度就会算成10.0

(c语言中)想知道double,int,%d和%f的关系
int:整型,即我们通常意义下的整数变量,例如1、2、3、4、5等。double:双精度实型数,即我们通常意义下的小数,例如1.25、1.37、5.0等。d:这是C语言中scanf用于输入整数的格式,输入整数的格式是scanf("%d",&a)。f:这是C语言中scanf用于输入小数的格式,输入整数的格式是scanf("%lf",&a...

Python:基本数据类型及应用
2. divmod(x,y):商余运算,如divmod(10,3)结果为(3,1)。3. pow(x,y):幂运算,x的y次幂。4. round(x[d]):四舍五入,保留d位小数。5. int(x):将x转换为整数。6. float(x):将x转换为小数。实例操作:坚持不懈的蜗牛。假设蜗牛每天爬行井底距离的0.1%,让我们通过计算一年后...

C语言怎么对浮点型的数求余?
这样:float a=3.14 ,b=3;int c;a*=100;b*=100;c=(int)a%(int)b;a=(float)c\/100;只能用于整形,不能用于浮点,如果浮点定义,必然报错,结果应该是0,不可能是0.14,int=3.14系统默认为3 3%3=0,想得到0.14可以借助系统函数。

python中10\/2的结果
结果是5。python2和python3在除法运算上存在差异。在python2中,10\/2就是整型,python3中除法运算结果则为float浮点类型。使用int做类型转化,另一种是使用py3整除操作符,python3提供了一个整除操作符\/\/,也就是双斜杠。python3处理的方式更灵活点,一般的需求还是要保留小数。如果在python2实现结果为...

请问c语言中的float和double类型有什么区别?什么叫做单精度和双精度...
单精数值范围: ± ~10的-44.85次方 到 约 10的38.53次方 双精度数值范围 ± ~10的-323.3 次方 to 约 10的 308.3次方。float a=1.234567;double b=1.2345678901234;--- 10%3 整除取余数,得 1。1 用 float 和 double 表示,精度没有区别。 a=(float)(10%3); b=(double)(10...