#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/06/29 01:38:20
![#include#include#includeint main(){long int x1=123456789;long int x2=12345;int x3=123;double y1=123.6;int z=(int)y1; printf(](/uploads/image/z/5471000-8-0.jpg?t=%23include%23include%23includeint+main%28%29%7Blong+int+x1%3D123456789%3Blong+int+x2%3D12345%3Bint+x3%3D123%3Bdouble+y1%3D123.6%3Bint+z%3D%28int%29y1%3B+printf%28%22%25ld%2C%25d%3E%5Cn%22%22%25ld%2C%25d%3E%5Cn%22%22%25d%2C%25lf%3E%5Cn%22+%22%25lf%2C%25d%3E%5Cn%22+%22%3C+z--%3E%25d%2C%25lf%3E%5Cn%22%2Cx1%2Cx1%2Cx2%2Cx2%2Cx3%2Cx3%2Cy1%2Cy1%2Cz%2Cz%29%3B+system%28%22pause%22%29%3Breturn+0%3B%7D%E5%85%B3%E9%94%AE)
#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;
}