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

  • 33
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值