浅暮流影 发表于 2020-8-10 18:17:22

这个类型转换的结果怎么来的(C语言)

本帖最后由 浅暮流影 于 2020-8-10 18:33 编辑

#include <stdio.h>

void main()
{
        int a,b=322;
        float x,y=8.88;
        char c1='k',c2;
        a=y;
        x=b;
        a=c1;
        c2=b;
        printf("%d,%f,%d,%c",a,x,a,c2);
}
结果是107,322.000000,107,B

sunrise085 发表于 2020-8-10 18:24:40

我这里运行结果是
107,322.000000,107,B

zltzlt 发表于 2020-8-10 18:25:07

我这代码的执行结果是107,322.000000,107,B

小黑玩C++ 发表于 2020-8-10 18:27:30

额,化简后你的:
a=c1;你把字符型强制转换成了整数型,所以变成了107
x=b=322;
a=c1;
c2=b;又是强制转换……
而:
第一个%d是整型输出,由于整数是由字符型强制转换而来,可能是乱码,所以输出是107
第二个%f是实数输出,可以输出整数,所以输出322
第三个应该也是107,这个我不懂,请教楼下大神
第四个%c是输出字符的,你给他放了个整数,所以转换错误,出来个107{:10_277:}

浅暮流影 发表于 2020-8-10 18:28:10

sunrise085 发表于 2020-8-10 18:24
我这里运行结果是

l漏了,谢谢

zltzlt 发表于 2020-8-10 18:30:24

a = c1 这一句将 a 赋值为了字符 'k' 的 ASCII 码 107,所以 a 为 107
b 赋值给浮点数类型的变量 x,所以 x 为以浮点数表示的 322 也就是 322.000000
322 被赋值给了字符类型变量 c2,而 char 类型最多只能存储 127,所以余下的部分被 “裁剪”,322 % 128 为 66,打印的是 ASCII 码对应为 66 的字符 'B' 。

sunrise085 发表于 2020-8-10 18:32:59

浅暮流影 发表于 2020-8-10 18:28
l漏了,谢谢

a=c1;这句就把字符'k'赋值给int类型的a,'k'的ASCII吗是107,所以a的值为107
x=b;    这句把int类型的322赋值给浮点型,然后x的值就是322.000000
c2=b;   这句把int类型的322赋值给char类型的c2,char是一个字节,只显示256以下的值,所以实际上c2的值是322-256=66,ASCII码为66的值是'B'
页: [1]
查看完整版本: 这个类型转换的结果怎么来的(C语言)