鱼C论坛

 找回密码
 立即注册
查看: 1927|回复: 4

运算符运算问题和舍入误差问题

[复制链接]
发表于 2021-9-22 11:54:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void main()
{
int i=8,j=5,k=5,J=5,K=5,p,q,a,b;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",-i++);
printf("%d\n",-i--);
p=j+++j+++j++;
q=(++k)+++k+++k;
a=(J++)+(J++)+(J++);
b=(++K)+(++K)+(++K);
printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n",p,q,j,k,a,b,J,K);
}

中的b值为什么为22,我自己算出来应该是21

#include <stdio.h>
void main()
{
float PI=3.14159;
int r=5;
float s;
s=r*r*PI;
printf("s=%d\n",s);
}

s我无论定义为单精度浮点型float还是双精度浮点型得出来的结果都是s=1342177280,这是舍入误差导致的还是什么其他原因,要怎么解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-23 09:28:01 | 显示全部楼层
1. 自己再算下,机器肯定没理解错
2.
printf("s=%d\n",s);
这句改为
printf("s=%f\n",s);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-23 09:54:31 | 显示全部楼层
b=(++K)+(++K)+(++K);
优先级先算括号里的再相加,应该是8+8+8=24;
编译器不同的,结果不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 20:20:47 | 显示全部楼层
jhq999 发表于 2021-9-23 09:54
优先级先算括号里的再相加,应该是8+8+8=24;
编译器不同的,结果不一样。

你这话说的对吗?结果也和编译有关?又不是sizeof()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 20:23:48 | 显示全部楼层
解答一下第二个吧,如果是float型数据,格式化输出用%f,如果是double型数据,格式化输出用%lf.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表