y是float型,a是int型,把float变量赋给int变量通常会导致精度丢失,所以有一个warning。改成a = (int)y;强制类型转换。
int转float丢失数据说的是精度丢失。在C语言中,int是整型变量,其代表的是准确值。而float是单精度浮点数,其本身是有精度限制的。也就是说,存在float变量中的数据,可能看起来是那个数,打印出来也是,但是实际存的是一个很接近但是并不准确的值。比如int的值是1000,转成float之后,可能存的就是100...
混合类型运算根据运算符的次序,由低优先级的数据类型向高优先级的数据类型转化。这里是int转化为float,表达式返回float。
在C语言中,可以通过强制类型转换将float类型转换为int类型,也可以通过类型转换函数将int类型转换为float类型。 将float转换为int: 使用强制类型转换,将float类型的变量赋值给int类型的变量。例如: float f = 3.14; int i = (int)f; 复制代码 在这个例子中,将浮点数3.14强制转换为整数,结果将变为3。 将int转...
int型的有效位数是31,而float型小数域的有效位只有23位,也就是说如果上面的a的二进制的有效位超过了24位,那么float型的小数域的精度就不够了。因此必须进行舍入。比如:如果上面的a的二进制为0000 0001 1111 0101 0100 0011 0010 0001。这时b的小数域必须有24位才够...
这些类型进行整数运算时,结果类型是占用字节数更多的类型。比如char与int运算结果为int。 enum是枚举类型,也可以作为整数处理。 旧标准的C语言没有布尔类型,用整型代替,0是假,1是真,虽然其它非0值都是真,但一般建议统一用1来表示。 浮点数类型有低精度类型float、高精度类型double。同样地,整数与浮点数的运算结果...
1、从int是表达很精确的类型,而float不是,因此从int转换到float确实会出现上述的warning;2、这里之所以会出现,是因为:“整数/整数”是一个整除,结果仍旧是整数,除不尽的会丢弃;然后再将一个整数结果赋值给float,于是warning出现了;直接消除的方法就是强制类型转换:average=(float)(sum/3);这...
int型的有效位数是31,而float型小数域的有效位只有23位,也就是说如果上面的a的二进制的有效位超过了24位,那么float型的小数域的精度就不够了。因此必须进行舍入。比如:如果上面的a的二进制为0000 0001 1111 0101 0100 0011 0010 0001。这时b的小数域必须有24位才够,但是,这显然是不现实的,因此必须舍入到23...
int i;float m[10];printf("In main before calling\n");for(i=0;i<10;i++){ m[i]=i+20;printf("%f\t",m[i]); //你是这里少了逗号,那句话的意思是警告,int变成float方法最好不要这样写,其实那样写暂时没什么事 } z();printf("\nIn main after calling\n");for(i=0...
错误是因为,你定义的char c1,你在下面赋值写的cl,所以error错误是 没有定义cl。至于你发的warning是警告,意思是float转int可能会损失精度。