1. 计算机数据的本质与表示基础
计算机内部所有数据最终都以二进制形式存在。当我们用C语言声明一个变量时,实际上是在告诉计算机:"请为我预留一块特定大小的内存区域,并按照我指定的方式解释其中的0和1"。这个"解释方式"就是数据类型的关键所在。
现代计算机采用二进制而非十进制的原因主要有三:
- 物理实现简单:晶体管只需区分开/关两种状态
- 抗干扰能力强:高低电压比多级电压更稳定可靠
- 运算规则简单:布尔代数体系成熟完善
以最常见的32位系统为例,基本数据类型的存储方式如下:
| 数据类型 | 存储大小 | 取值范围 | 存储格式 |
|---|---|---|---|
| char | 1字节 | -128~127或0~255 | 纯二进制 |
| short | 2字节 | -32768~32767 | 二进制补码 |
| int | 4字节 | -2147483648~2147483647 | 二进制补码 |
| float | 4字节 | 约±3.4e±38 | IEEE 754单精度浮点 |
| double | 8字节 | 约±1.7e±308 | IEEE 754双精度浮点 |
注意:实际大小可能因编译器和平台而异,可用sizeof()运算符获取确切值
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 整数类型的二进制表示
2.1 原码、反码与补码
初学者最容易困惑的是负数表示。计算机发展史上出现过三种主要方案:
-
原码:最高位为符号位(0正1负),其余位表示绝对值
- 例如+5:00000101
- -5:10000101
- 问题:存在+0和-0,加减运算不方便
-
反码:正数不变,负数符号位不变,其余位取反
- -5:11111010
- 问题:仍然存在±0,跨零运算需要额外处理
-
补码:正数不变,负数为反码+1(现代计
