01数字在电脑里是什么样子?
我们看到的数字可能是 13、-5、3.14。 但电脑内存里不会摆着一个“13”形状的小卡片。
计算机会按照数据类型和编码规则, 把数值表示成一串 Bit,也就是 0 和 1 的组合。
人看到的数字
例如 13
按照规则表示
例如使用 8 位无符号整数
00001101
内存中的 Bit
这串 Bit 在该规则下表示 13
02正整数怎样保存?
对于非负整数,最容易理解的方法就是: 把这个数写成二进制。
例如十进制的 13:
如果规定它必须占 8 Bit,就在前面补 0:
00001101
03为什么数字要占固定数量的 Bit?
计算机处理数据时,必须知道一段数据有多长。 所以整数类型通常会规定固定的位宽(bit width)。
无符号时可表示 0~255
一共有 65,536 种 Bit 组合
可以表示约 42.9 亿种不同组合
组合数量非常巨大
对无符号整数来说, n 个 Bit 可以表示从 0 到 2ⁿ - 1。
8 Bit unsigned:0 ~ 2⁸ - 1 = 255
04负数怎样保存?
如果只会表示 0 和正数,还不够。 程序也需要保存 -1、-5、-100 这样的负数。
现代计算机里,有符号整数通常使用 二进制补码(two's complement)。
00000101
11111010
11111011
11111011
在 8 位二进制补码中: -128 ~ 127 都能表示。
05小数怎样保存?
小数比整数复杂。 现代计算机常用浮点数(floating-point)来表示很大范围内的实数近似值。
常见的 IEEE 754 浮点格式,会把一串 Bit 分成几个部分, 用来表示符号、有效数字和指数。
很多十进制小数不能用有限个二进制位精确表示。 例如常见二进制浮点格式中的 0.1 往往只是一个非常接近 0.1 的近似值。
06同一串 Bit 为什么能有不同含义?
一串 Bit 本身只是一种模式。 它到底表示什么,必须看数据类型和解释规则。
01000001
当作无符号整数
65按 ASCII 解释
A当作原始 Bit
0100000107数字会不会“装不下”?
会。 因为固定数量的 Bit 只能提供有限数量的组合。
11111111₂
如果还想再加 1 呢?
结果取决于语言、类型和运行环境的规则,不能简单假设“自动变成更大的盒子”。
浮点数还有另一个问题: 不仅范围有限,精度也有限。 有些数虽然在范围内,也只能保存近似值。
范围 Range
能表示的数最大、最小能到哪里
精度 Precision
能把数表示得多细、多准确
你已经知道了什么
- 电脑里的数字最终会按照某种规则表示成一串 Bit。
- 非负整数可以直接按照二进制位值来表示。
- 整数通常有固定的位宽,例如 8、16、32 或 64 Bit。
- n 位无符号整数通常可以表示 0 到 2ⁿ - 1。
- 现代计算机里的有符号整数通常采用二进制补码,而不是简单“最高位当负号”。
- 小数常用浮点数表示,常见格式遵循 IEEE 754,并且很多十进制小数只能近似保存。
- 同一串 Bit 可以按不同规则解释,因此数据类型和编码规则非常重要。
- 固定宽度意味着数字有范围限制;浮点数除了范围限制,还存在精度限制。
下一个问题: 数字已经能住进电脑里了, 那英文字母 A、B、C 又是怎样变成数字保存的? 下一篇:字母是怎样变成数字的?