laoque 发表于 2022-12-25 21:54:51

类型转换

322没有对应的ascll,但是输出了B;和66输出的一样;而其他的没有则无输出;
为什么322会输出B呢?


jackz007 发表于 2022-12-25 22:10:36

本帖最后由 jackz007 于 2022-12-25 22:14 编辑

      322 是一个整型数,占用 4 个字节,写成十六进制形式是 0x000142,我们所使用电脑的 CPU 采用类 Intel 架构,多字节数值一律采用 Little-Endian 编码,整型数 0x000142 在内存中的实际储存顺序是:42 01 00 00,第一个字节 0x42 如果用 printf() 按 %c 进行显示,那就正好是字符 'B'。
      字符 'B' 是通过代码中的变量 c2 打印输出的。

zhangjinxuan 发表于 2022-12-26 08:05:59

说白了就是小端,存储得反过来存储,所以就是 B

我还有一种方法,因为一字节可以表示256种字符,所以我们用322对256取余,得到66,故答案为66,转为char就是B

zhangjinxuan 发表于 2022-12-26 08:08:06

而其他的没有输出应该是输出了什么不可见字符,改一改还可能输出很像乱码的字符,当然“乱码”这种表述不准确

laoque 发表于 2022-12-26 13:44:03

感谢

laoque 发表于 2022-12-26 13:45:19

zhangjinxuan 发表于 2022-12-26 08:05
说白了就是小端,存储得反过来存储,所以就是 B

我还有一种方法,因为一字节可以表示256种字符,所以我 ...

感谢

laoque 发表于 2022-12-26 13:45:32

jackz007 发表于 2022-12-25 22:10
322 是一个整型数,占用 4 个字节,写成十六进制形式是 0x000142,我们所使用电脑的 CPU 采用类 Inte ...

感谢
页: [1]
查看完整版本: 类型转换