这个问题很容易让人感到费解,同样的数值,而仅是类型不同,的确会得到不同的结果。算术运算是通过栈结构来实现的,操作数和运算符分别存放在操作数栈和运算符栈中,根据运算符的优先级进行进栈、压栈操作。假设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环境中的运行结果见图
看你的x值了,若输入是整数,就是一样的,若是小数,则int为整形,只有整数部分的运算,而float也可以保留小数
是小数位的不同,整型只要整数部分。浮点型保留六-八位小数部分。
你看一下字符变量运算的那一节中,不同变量之间相互运算时会发生转化的。