关于#ASCII#的问题,如何解决?


#include <stdio.h>

int main() {

    char a = '2',
         b = '5';

    printf("%d\n", a * b);
    printf("%c", a * b);


    return 0;
}

输出的结果是2650 和Z,2650我理解,但是这个Z是怎么来的?求解答。

img

img

通过二进制乘法可以计算出字符2的二进制00110010乘字符5的二进制00110101得到的结果是1010 0101 1010,由于系统对每个字符只能提供8位来进行存储因此前面超出的部分省略只剩下了后8位刚好是字符Z

'2'和‘5’对应的ASCII码分别是50 53,50 * 53 = 2650,超过了256位(C语言用来存char型所占空间的大小)
2650 % 256 = 90
90对应的字符便是大写字母Z