二进制是计算机的基础,数据的存储在底层看来均是由二进制来表示的,那么如何用二进制来表示各种数据呢?此时就需要设计出一套完整的科学的储存方案
整型数据的存储
整型数据包括 short, int, long 等,其中最为常用的便是 int ,在目前的系统中(32位和64位编译器,以C语言为主要实例),其所占字节如下:
| 数据类型 | 所占字节 |
|---|---|
short |
2 |
int |
4 |
long |
8 |
而整型数据的存储都是类似的,也就是以二进制方式进行存储,所以很容易理解,但是与日常使用的二进制数不同的是,在计算机储存中,为了方便地计算加减法,我们实际储存的是二进制数的 补码1:
示例
下面写几个简单 int 类型数字的在计算机中的二进制储存方式:
| 十进制 | 二进制(int) |
|---|---|
| 10 | 00000000 00000000 00000000 00001010 |
| -10 | 11111111 11111111 11111111 11110110 |
| 0 | 00000000 00000000 00000000 00000000 |
注:字符型(即 char)的存储方式和整数型一致,只不过仅占一个字节
浮点型数据的储存
浮点型数据由于有了小数点,小数点后的位数甚至可能是无穷的,那么此时我们就无法再采用和整型数据存储相同的方式了,必须有一种新的存储方法
浮点型数据最常见的有 float 和 double ,两种数据类型分别占4字节和8字节
所以,要在固定的位数中表示出各种浮点数,计算机中采取了如下方案:
下面以 float 为例进行说明:
从左到右:第一个 bit 为符号位,接下来的8个 bit 为整数位,后 23 个 bit 为小数位,依次为\(2^{-1}, 2^{-2}, ...\) ,如下图所示:

所表示的数字,由以下方式叠加:\((-1)^m * 1.XXXX * 2^{exp-127}\)
说明:
XXX为小数位所表示的数字exp为整数位数字的大小- 综上所述,
float可表示从 $2^{-127} $ 到 \(2^{128}\)的数字
二进制的表示方式,具体计算方法为:正数补码不变,负数的补码等于反码加一↩
