#include#include#includeint main(){long int x1=123456789;long int x2=12345;int x3=123;double y1=123.6;int z=(int)y1; printf("%ld,%d>\n""%ld,%d>\n""%d,%lf>\n" "%lf,%d>\n" "< z-->%d,%lf>\n",x1,x1,x2,x2,x3,x3,y1,y1,z,z); system("pause");return 0;}关键

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 04:46:35
#include#include#includeint main(){long int x1=123456789;long int x2=12345;int x3=123;double y1=123.6;int z=(int)y1; printf(\n""%ld,%d>\n""%d,%lf>\n" "%lf,%d>\n" "< z-->%d,%lf>\n",x1,x1,x2,x2,x3,x3,y1,y1,z,z); system("pause");return 0;}关键" />

#include#include#includeint main(){long int x1=123456789;long int x2=12345;int x3=123;double y1=123.6;int z=(int)y1; printf("%ld,%d>\n""%ld,%d>\n""%d,%lf>\n" "%lf,%d>\n" "< z-->%d,%lf>\n",x1,x1,x2,x2,x3,x3,y1,y1,z,z); system("pause");return 0;}关键
#include
#include
#include
int main(){
long int x1=123456789;
long int x2=12345;
int x3=123;
double y1=123.6;
int z=(int)y1;
printf(
"%ld,%d>\n"
"%ld,%d>\n"
"%d,%lf>\n"
"%lf,%d>\n"
"< z-->%d,%lf>\n",
x1,x1,
x2,x2,
x3,x3,
y1,y1,
z,z);
system("pause");
return 0;
}
关键问题在于:为什么错误的输出方式会影响到正确的输出方式

#include#include#includeint main(){long int x1=123456789;long int x2=12345;int x3=123;double y1=123.6;int z=(int)y1; printf("%ld,%d>\n""%ld,%d>\n""%d,%lf>\n" "%lf,%d>\n" "< z-->%d,%lf>\n",x1,x1,x2,x2,x3,x3,y1,y1,z,z); system("pause");return 0;}关键
为什么错误的输出方式会影响到正确的输出方式是因为:
一般机器上,
int 2 字节
long 4 字节
float 4 字节
double 8 字节
char 1字节
在 "%d,%lf>\n" 这行,后一个X3在作为不定参数压入值时,自动转成double (类型提升)
机器读取了2 + 8 = 10个字节,而实际上两个X3加起来只有四个字节,
所以造成了错误,因为机器认为每个二进制位 都是 有意义的.
并且 整型 和 实数型 在底层 二进制位上的 排列标准,也是不一样的.
所以在输出时要注意控制变量的格式
只要把输出变量强制转换就可以了,代码如下,修改地方已表明
#include
#include
#include
int main(){
long int x1=123456789;
long int x2=12345;
int x3=123;
double y1=123.6;
int z=(int)y1;
printf(
"%ld,%d>\n"
"%ld,%d>\n"
"%d,%lf>\n"
"%lf,%d>\n"
"< z-->%d,%lf>\n",
x1,x1,
x2,x2,
x3,double(x3),//强制转换成double型
y1,int(y1),//强制转换成int型
z,double(z)); //强制转换成double型
system("pause");
return 0;
}