一个c语言不会的问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 19:52:04
main()
{ int a;
char c=’10’;
float f=100.0;
double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}

问题: 为什么c的值为56?
f为1.8?
a为1?

请大家帮我看一下好吗,谢谢!!!

char表示范围是0~256。
你的char c = '10';实际上编译器认定是 char c = '0';
也就是说向你那样定义“c = '10'”的思路是不正确的,编译器会给你个警告,然后它按照你定义字符中最后一个字符给c赋值。
所以说用格式化%d输出C值是48;然后你让C等与它自己的值乘6.5,其后的值就超出char 所能表示的范围了。当它超出范围后剩余的就从0计算了。我粗略的计算了一下,乘完以后的值是312,显然超出了256。
在这里打个比方,你有312斤水,但有只有一个能装256斤的罐子,为了能把你312斤水装完,当到满256斤的时候,罐子满了,那么编译器就会把罐子中的水到了,清空,然后把剩下的水在装进罐子中,这是罐子的水就剩56斤了

回LS:char 在表示字符的时候的范围是0~256,不是312-128-128,应该是312-256。

*char c='10';//因为不是字符串,则取0的值48;
/*
例:char c='abc';//则取最后一位的值就是c的值;
/********关于c********/
c*=(x=6.5)=56是因为
x是double,c是char,结果为char
c=(double)c*(double)x =48*56=312
signed char的范围是-128~+127, unsigned char 的范围是0 ~ 256;
因此312溢出 , 312-128-128=56;
字符8 = 十进制56//看asic代码
当char sum=c*x 结果是字符8,字符8的十进制是56;
/********关于f********/
f/=c = f=f/c;
f=100.0/56 = 1.785...
取小数点一位数则1.8
/********关于a********/
a=f = a/1.8
a是int,1.8的int 当然是1

*/
关于float 和我想的一