c语言中定义int型变量和float型变量,会使y=++x*++x的结果不同,这是什么原因?

2025-01-04 01:28:11
推荐回答(4个)
回答1:

这个问题很容易让人感到费解,同样的数值,而仅是类型不同,的确会得到不同的结果。算术运算是通过栈结构来实现的,操作数和运算符分别存放在操作数栈和运算符栈中,根据运算符的优先级进行进栈、压栈操作。假设x初值都为1,运算符‘++’的优先级高于‘*’,很容易理解对于浮点数是2.0*3.0得到6.000000。而对于整型数,两个操作数都为3,得到结果是9。由此分析,对于整型数‘++’操作的是同一个内存地址,而对于浮点型数则是直接把运算结果赋值给栈空间。以下是程序。

//testplus.c

#include 

#include 

#include 

int main(int argc,char **argv)

{

int x_i=1,y_i;

float x_f=1.0,y_f;

if(memcmp("int",argv[1],strlen("int"))==0)

{

y_i=++x_i*++x_i;

printf("int plus result is %d\n",y_i);

}

else if(memcmp("float",argv[1],strlen("float"))==0)

{

y_f=++x_f*++x_f;

printf("float plus result is %f\n",y_f);

}

else{

printf("unexpected data type,get nothing!\n");

}

return 0;

}

在Linux环境中的运行结果见图

回答2:

看你的x值了,若输入是整数,就是一样的,若是小数,则int为整形,只有整数部分的运算,而float也可以保留小数

回答3:

是小数位的不同,整型只要整数部分。浮点型保留六-八位小数部分。

回答4:

你看一下字符变量运算的那一节中,不同变量之间相互运算时会发生转化的。