C/C++中char类型固定占用1字节,存储ASCII码对应的整数值。同样8位二进制可解释为有符号或无符号数,取值范围不同。现代CPU最小可寻址单元是1字节,语言标准也以此为基础。Java的char采用UTF-16编码,占用2字节以支持Unicode字符,跨语言编程时需注意此差异。
结论先行:在 C/C++ 中,char 类型在内存中固定占用 1 字节(8 位)。无论存储的是字母、数字还是符号,这个大小始终不变。这一规定并非随意设定,而是 C/C++ 标准定义的“最小存储单位”,同时也是现代 CPU 在硬件层面能直接寻址的最基本粒度。
你可能会好奇:为什么同样是字符,Java 中的 char 却占用 2 字节?别急,我们一步步来解开这个谜团。
长期稳定更新的攒劲资源: >>>点此立即查看<<<

实际上,内存中根本没有“字符”这种东西——只有 0 和 1 的排列。char 类型存储的是字符对应的 ASCII 码值(一个整数)。通过几个例子可以更直观地理解:
'A' 的二进制形式是 01000001(十进制 65)'0' 的二进制形式是 00110000(十进制 48,并非数值 0)'\n' 的二进制形式是 00001010(十进制 10)使用 printf 时,若用 %c 输出,系统会查 ASCII 表将其“翻译”为可见字符;若用 %d 输出,则直接显示对应的整数。因此,理解 char 的关键在于:它本质上就是一个整数,只是被赋予了字符的解释方式。
同样是 8 位二进制,由于解释方式不同,取值范围也天差地别:
举例来说,二进制数 11111111:
signed char 解读时,值为 1unsigned char 解读时,值为 255底层比特序列完全相同,区别仅在于编译器如何“读取”这 8 个比特。这种设计非常实用,能够用同一个存储单元表示两种截然不同的数值范围。
这并非巧合,而是系列设计选择的结果:
sizeof(char) 等于 1——这是语言层面的基准单位,其他所有类型的大小都以此为依据(例如 sizeof(int) ≥ sizeof(char))回到开头的问题:千万不要混淆 C/C++ 的 char 和 Java 的 char:
char 占用 1 字节,对应 ASCII 或扩展 ASCIIchar 占用 2 字节(UTF-16 编码单元),能够直接表示 Unicode 基本平面字符(范围 0–65535)同一个字符 'A',在 C/C++ 中只占 1 字节,在 Java 中则占 2 字节。这一差异归根结底源于编码模型与运行环境的不同。因此,跨语言编程时务必留意这个“隐形”的占用成本,否则很容易踩坑。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述