Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830579
  • 博文数量: 137
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1409
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(137)

文章存档

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2011-11-23 00:57:31

代码一、
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main ( void )
  4. {
  5.       float c = 0.0;
  6.       c = 1 /2 ;
  7.       printf("== 1 / 2 = %.2f == \n",c);
  8.       return 0;
  9. }
编译:
$ cc -o b b.c
运行:
$ ./b
== 1 / 2 = 0.00 ==
$

问题出来了,为啥不是 0.50 ?

代码二、
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main ( void )
  4. {
  5.      float c = 0.0;
  6.      c = (float)((float)1 /(float)2) ;
  7.      printf("== 1 / 2 = %.2f == \n",c);
  8.      return 0;
  9. }
编译:
$ cc -o b b.c
运行:
$ ./b
== 1 / 2 = 0.50 ==
$

看出来代码的不同么?

如果是两个整数相除,其结果是绝对不会自动转换成浮点型或者是双精度型的,因此在相除之前,必须对参与触法运算的整数或者是整形变量强制转换成浮点型或者是双精度型,切记,切记。


阅读(4517) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~