C语言学习笔记 - 24.C编程预知识 - 常量以什么样的二进制代码存储在计算机中
一、核心前提认知
计算机硬件仅能识别和存储二进制数据(0和1),任何类型的常量在存入内存前,都必须按照指定的编码规则转换为二进制代码。
常量的二进制存储本质是编码规则问题,不同数据类型的常量遵循完全不同的编码标准,这是C语言数据类型体系的底层核心逻辑。
二、不同类型常量的二进制存储规则
2.1 整型常量:补码编码规则
核心存储规则
所有整型常量(int/short/long类型),均以补码的形式转换为二进制代码,存储在计算机内存中。
补码是C语言整数存储的统一标准,它规范了整数与二进制代码的一一对应关系,同时统一了正负数的存储规则,简化了计算机加减运算的硬件实现逻辑;
补码的详细计算方法、正负数补码的差异,将在课程后期专题章节详细讲解,入门阶段需牢记核心存储结论。
存储流程示例
以代码int i = 86;为例,整型常量的完整存储流程为:
取十进制整型常量
86;按照补码规则,将
86转换为对应的二进制代码;将转换后的二进制代码,写入变量
i对应的内存空间中。
2.2 浮点型常量(实数/小数):IEEE 754标准
核心存储规则
浮点型常量(float/double类型,即带小数位的实数),遵循IEEE 754国际标准转换为二进制代码存储。
补充说明
IEEE 754标准将小数拆分为符号位、指数位、尾数位三部分进行二进制编码,解决了小数的二进制存储与精度控制问题;
入门阶段仅需了解该存储标准即可,无需深入掌握编码细节;
该标准的核心应用场景为底层数据通信、跨设备数据解析,日常业务开发极少需要手动拆解编码。
2.3 字符型常量:ASCII码+补码两步存储法
核心存储规则
字符型常量的存储分为两步完成,其本质与整数的存储方式完全一致。
完整存储流程(以字符'A'为例)
查表映射:通过ASCII码(美国信息交换标准代码),将字符映射为一个固定的十进制整数。
ASCII码是国际通用的字符编码标准,规定了每个可打印字符、控制字符对应的唯一整数,典型映射关系如下:
字符
对应十进制整数
'A'65
'B'66
'?'63
'0'48
补码转换:将映射得到的整数,按照整型常量的存储规则,以补码形式转换为二进制代码,最终写入内存。
核心结论
字符在计算机中本质上是以整数的形式存储的,C语言中所有对字符的操作,底层都是对其映射的整数进行运算。
三、代码示例与运行验证
// 引入标准输入输出头文件,为printf函数提供支持 #include <stdio.h> int main(void) { // 1. 整型常量:以补码形式存储在内存中 int num_int = 86; // 2. 浮点型常量:以IEEE 754标准存储在内存中 float num_float = 8.6; // 3. 字符型常量:先映射ASCII码,再以补码形式存储 char ch = 'A'; // 以十进制格式输出整型常量 printf("整型常量86的十进制值:%d\n", num_int); // 以十六进制格式输出,可间接查看二进制存储特征 printf("整型常量86的十六进制值:%x\n", num_int); // 输出字符常量的字符形式 printf("字符常量'A'的字符形式:%c\n", ch); // 输出字符常量对应的ASCII码整数,验证其整数存储本质 printf("字符常量'A'对应的ASCII码整数:%d\n", ch); return 0; }代码运行结果
整型常量86的十进制值:86 整型常量86的十六进制值:56 字符常量'A'的字符形式:A 字符常量'A'对应的ASCII码整数:65四、核心要点总结
计算机仅能存储二进制数据,所有常量必须先按对应编码规则转换为二进制,才能存入内存;
整型常量:以补码形式转换为二进制存储,是C语言最基础的存储规则;
浮点型常量:遵循IEEE 754国际标准进行二进制编码存储;
字符型常量:先通过ASCII码表映射为整数,再按整型补码规则存储,本质与整数存储完全一致;
本章节为底层原理知识,入门阶段需牢记核心存储规则,详细编码逻辑将在后期专题章节深入讲解。
