目录
一、存储单位(比特/字节)
二、数制/进制(二/八/十/十六)
三、码制(原码/反码/补码/移码)
四、二进制表示小数
(一)定点数
(二)浮点数
十进制转化为浮点数
一、存储单位(比特/字节)
最小存储单位:比特 (0或1)
基本存储单位:字节
单位 | 等于 |
---|---|
字节 (Byte/B) | 8 位 (bit) |
千字节 (KB) | 1024 字节 (B) |
兆字节 (MB) | 1024 千字节 (KB) |
吉字节 (GB) | 1024 兆字节 (MB) |
太字节 (TB) | 1024 吉字节 (GB) |
拍字节 (PB) | 1024 太字节 (TB) |
二、数制/进制(二/八/十/十六)
进制类型 | 数字范围 | C语言表示方式 |
---|---|---|
二进制(B) | 0, 1 | 0b开头 |
八进制(Q) | 0~7 | 0开头 |
十进制(D) | 0~9 | 直接表示 |
十六进制(H) | 0~ 9 A~F | 0x开头 |
三、码制(原码/反码/补码/移码)
机器数:数在机器中的表现形式
真值:一般书写表示的数,机器数对应的原值
计算机内部只有0、1
正负?假设8位,首位:0为正,1为负
二进制数按照平时竖式直接相加发现结果不对,提出码制,解决了加减运算的缺点
类型 | 定义 | 备注 |
---|---|---|
原码 | 符号位+真值的绝对值 第一位表示符号,其余位表示值。+1 = 0000 0001 | 正0负0,零有两种表示方式 |
反码 | 正数的反码是其本身,负数的反码:原码符号位不变,其余各个位取反。 | 正0负0,零有两种表示方式 |
补码 | 正数的补码是其本身,负数的补码:反码(原码符号位不变,其余各个位取反)加1 | 0只有一种表示方式 |
移码 | 补码的符号位取反 | 简化了比较操作的运算 用于浮点数表示 |
四、二进制表示小数
(一)定点数
所以在一个8位的计算机中,前5位表示一个小数的整数部分,后3位表示小数部分,小数点默认是第五位后的位置(实际上计算机不会存储小数点,只是大家这么约定)。
使用11001001表示十进制的25.125。看起来很完美,也很容易理解,但是这么表示没有其他问题吗?
问题在于:
- 一个8位的计算机,整数部分111111十进制最大只能表示为31 ;小数部分0.111 最大只能表示0.875,表示的数据范围太小了。
- 当然在16位的计算机中,可以通过增大整数部分位数表示更大的数,增大小数部分的位数可以提高小数精度。
- 但是这种方式对计算机来说开销非常大,所以大多数计算机并没有选择使用定点数表示小数,而是采用浮点数表示小数。
(二)浮点数

十进制转化为浮点数
十进制——>二进制——>科学计数法