夕阳游子 发表于 2014-11-18 21:28:04

新手求助,零基础入门C语言在第二章类型转换3.18里面的列子

零基础入门C语言
在第二章类型转换3.18里面的列子
#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\n", a, x, a, c2);

}不理解为什么“c2”输出结果为“B”
我猜测是25+667=322,其中从0到66正好67个数字,正好66是B,不知道对不对,亲们解析一下,谢谢了

风之残月 发表于 2014-11-19 21:41:41

b = 322;c2 = b;
执行后需要将int转换为char,因为c2 = 0x00000142(4字节),因为char为1字节,所以会截断,b = 0x42 = 66 = 'B'

machimilk 发表于 2014-11-19 21:58:14

322 的二进制是 101000010
C2是按1字节方式ascii码转字符输出那么我们都知道1个字节是8位, 101000010超过了8位,
很明显就被截断了最前面的1 剩下01000010那么1000010这是二进制数就是十进制的66
66的ascii值的对应字符串就是B

夕阳游子 发表于 2014-11-22 22:49:13

风之残月 发表于 2014-11-19 21:41
b = 322;c2 = b;
执行后需要将int转换为char,因为c2 = 0x00000142(4字节),因为char为1字节,所以会 ...

谢谢亲了

夕阳游子 发表于 2014-11-22 22:50:09

machimilk 发表于 2014-11-19 21:58
322 的二进制是 101000010
C2是按1字节方式ascii码转字符输出那么我们都知道1个字节是8位, 101000010超 ...

谢谢亲了
页: [1]
查看完整版本: 新手求助,零基础入门C语言在第二章类型转换3.18里面的列子