数
简介
在计算机系统中,各种各样的信息内容(文字、图像、音频等)均是以数的形式被存储、计算与传输;
实际上,所有的信息均依赖电作为介质完成运转
- 数是对底层复杂电信号变化运转的简化抽象
数的表示形式(数制)
二进制
介绍
计算机的信息数据均采用二进制来表示
- 二进制的数由’0’和’1’表示,逢二进一,通过位数的堆叠表示任意数字,前/后缀"0b"、“0B”、“b/B”
- 从数学上看,从右往左数第 位表示 的 次幂
例: 0b10101100 -->
- 位(bit,b,比特) 是数据存储的最小单位,8位二进制数字(8bit)形成一个 字节(byte,B)
- 字: 计算机进行数据存储、数据处理的单位;字长: 一个字的长度/位数,不同平台和处理器提供的字长不同
八进制, 十进制, 十六进制
本质为二进制数字的简化,便于查看与使用
- 八进制前/后缀:“0o”、“0O”、“o/O”
- 十进制后缀:“d/D”
- 十六进制前/后缀:“0x”、“0X”、“h/H”
数的类型表示
该节使用在无特殊说明的情况下默认使用 8位 二进制数字举例
以符号划分类型
以符号作为划分基准,分为 无符号数 和 有符号数
无符号数
无符号数所有位表示数值,所表示的数字为非负数,表示的范围是 0 ~ 255 (00000000
~ 11111111
)
有符号数
有符号数的最高位表示正(0)负(1)(符号位),其余位数表示数值(数位),引入三种表示方法: 原码 、反码 和 补码
- 原码
- 最简单的表示方法,字面意思上的最高位表示符号,其余位表示数字
00000001
表示+1
,10000001
表示-1
,诸如此类 - 表示范围
- 正数区域: 1 ~ 127 (
00000001
~01111111
) - 负数区域: -127 ~ -1 (
11111111
~10000001
) - 0: (
0000000
,10000000
)
- 正数区域: 1 ~ 127 (
- 缺点:
- 0 有两种表示方法(
0000000
(+0)和10000000
(-0)) - 直接用于运算时可能导致数值错误(例如正负数相加时,1 + (-1) = 0,但二进制计算 00000001 + 10000001 = 10000010(-2))
- 0 有两种表示方法(
- 反码
- 符号位为0时(正数),反码 == 原码;符号位为1时(负数),数位在原码数位表示的基础上全部取反
-1
在原码表示为10000001
, 其反码则为11111110
- 表示范围
- 正数区域: 1 ~ 127 (
00000001
~01111111
) - 负数区域: -127 ~ -1 (
10000000
~11111110
) - 0: (
0000000
,11111111
)
- 正数区域: 1 ~ 127 (
- 缺点:
- 0 有两种表示方法(
0000000
(+0)和11111111
(-0)) - 部分运算可能导致数值错误(11111010(-5) + 11111010(-5) = 11110100(-11))
- 0 有两种表示方法(
- 补码
- 当今的计算机系统中,普遍使用补码表示和存储数据
- 符号位为0时(正数),补码 == 原码;符号位为1时(负数),数位最低位的1保持不变,比该位高的位全部取反(数位在反码数位表示的基础上加1)
-1
在反码表示为11111110
, 其补码则为11111111
- 表示范围
- 正数区域: 1 ~ 127 (
00000001
~01111111
) - 负数区域: -128 ~ -1 (
10000000
~11111110
) - 0: (
0000000
)
- 正数区域: 1 ~ 127 (
以小数点的位置是否变化划分类型
以小数点的位置是否变化作为划分基准,分为 定点数 和 浮点数
计算机所表示的小数并非是精确的,表示的数值总是近似的,因此在计算中可能存在偏差,例如 0.1 + 0.2 不完全等于 0.3
定点数
- 定点表示法: 约定数值的小数点隐含/固定在某个位置上
举例: 25.125,整数部分简单表示为 11001,小数部分简单表示为 001(2^-3),合起来为11001001 --> 11001.001(小数点位置显示)
对于8位纯小数而言,最高位为符号位,小数点在最高位之后,其余表示数值 - 定点表示的数值范围较小
浮点数
- 表示形式类似科学计数法,浮点数 = 尾数 * 基数 ^ 指数
- 其表示的数值小数点位置是不固定的,称为浮点(floating point)
- IEEE-754 二进制浮点数算术标准
- 四种表示浮点数值方式
- 单精确度(32位)
- 双精确度(64位)
- 延伸单精确度(43位以上)
- 延伸双精确度(79位以上)
- 公式:
- S: 符号位
- M: 尾数(纯小数)
- E: 指数/阶码
- B: 偏移量
- 单精确浮点数
- 组成
- 符号位: 1bit
- 指数/阶码: 8bit
- 尾数: 23bit
- 偏移量: 127
- 表示范围约: ~
- 组成
- 双精确浮点数
- 组成
- 符号位: 1bit
- 指数/阶码: 8bit
- 尾数: 23bit
- 偏移量: 1023
- 表示范围约: ~
- 组成
- 四种表示浮点数值方式
- 运算
- 假设浮点数 , , 那么
- 步骤
- 0 操作数检查
- 对阶(原则是小阶对大阶)(小阶对应的尾数右移 位)
- 尾数相加减/乘除
- 结果规格化
- 尾数溢出: 右规 1 次(尾数右移 1 位,阶码 +1)
- |尾数| < : 左规(尾数左移 1 位,阶码 -1),左规可能多次,直到尾数规格化
- 舍入(根据一定规则,将数的最低位或低位若干位舍去,而对保留位的数进行修正)
- 要求
- 单次舍入引起的误差不超过保留数最低位的位权
- 多次舍入不造成误差积累
- IEEE-754 标准四种舍入
- 就近舍入(四舍五入)
- 朝 0 舍入
- 朝 +∞ 舍入
- 朝 -∞ 舍入
- 要求
- 判断阶码是否溢出(正溢出溢出标志置1,负溢出时运算结果清零)
数的运算
运算类型 | 运算符 | 运算描述 |
---|---|---|
算术运算 | + | 加法 |
- | 减法 | |
* | 乘法 | |
/ | 除法 | |
% | 取模 | |
逻辑运算 | & | 按位与 |
| | 按位或 | |
^ | 按位异或 | |
~ | 按位取反 | |
移位运算 | << | 左移 |
>> | 右移 | |
比较运算 | == | 等于 |
!= | 不等于 | |
> | 大于 | |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Forgotten Area!