C语言 您所在的位置:网站首页 两个指针可以相乘吗对吗 C语言

C语言

2023-09-03 22:14| 来源: 网络整理| 查看: 265

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宏定义一些浮点型数据的时候最容易发生,因此应当注意。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有