狸猫c 发表于 2021-9-22 11:54:31

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

#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,这是舍入误差导致的还是什么其他原因,要怎么解决

newu 发表于 2021-9-23 09:28:01

1. 自己再算下,机器肯定没理解错
2. printf("s=%d\n",s);这句改为printf("s=%f\n",s);

jhq999 发表于 2021-9-23 09:54:31

b=(++K)+(++K)+(++K);
优先级先算括号里的再相加,应该是8+8+8=24;
编译器不同的,结果不一样。

MZZ666 发表于 2021-9-25 20:20:47

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

你这话说的对吗?结果也和编译有关?又不是sizeof()

MZZ666 发表于 2021-9-25 20:23:48

解答一下第二个吧,如果是float型数据,格式化输出用%f,如果是double型数据,格式化输出用%lf.
页: [1]
查看完整版本: 运算符运算问题和舍入误差问题