C语言——整型和浮点型混合运算
·
1. int和double混合运算
C语言int和double混合运算时,会自动将int类型的数据转换为double类型的数据,最后得到的结果也是double类型。如下例:
double a=4.0/9.0;
int b=9*a;//b=3,因为double类型的4.0/9.0的值要小于4.0/9.0的实际值(考虑到有效位数有有限的)
上面代码中,b=3,因为double类型的4.0/9.0要小于4.0/9.0的实际值,这是由于浮点型有效位数的限制造成的,所以9*a的值要小于4,赋值给int类型的时候发生截断,因此b=3。
2. 给浮点型数据赋初始值
给浮点型数据赋初始值的时候,如果用表达式赋初始值,如下式:
double c=4/9;
//c=0,因为4/9小于1,int类型截断后为0,然后赋给double类型,发生类型转换,但是结果仍是0;
则无法给c正确赋值,c得到的初始值是0,而不是4/9表示的小数。因此应该按照下式来赋值:
double c=4.0/9.0;
3. 使用#define宏定义时,显式地将数据写成浮点数形式
#define INDEX (4/9)
int main(void){
int c=9*INDEX;//此时c=0,因为在编译阶段已经计算了INDEX 为0,所以c=9*0=0
printf("%d",PI);//打印出的结果为“0”
//其余代码
}
上面的代码展示了在#define宏定义阶段不正确的数据定义会导致一些错误的结果。如果我们希望#define宏定义的表达式表示一个浮点型数据,则应当在定义时显示表示其为浮点型。如下:
#define INDEX (4.0/9.0)
int main(void){
double c=9*INDEX;//此时c=4,如果C是int类型,则c=3.
printf("%f",PI);//打印出的结果为“0.444444”(printf输出浮点型默认6位小数)
//其余代码
}
上述情况在使用#define宏定义一些浮点型数据的时候最容易发生,因此应当注意。
更多推荐
已为社区贡献6条内容
所有评论(0)