这里写目录标题
一.进制运算的基本知识
1.1 进制概述
- 进位制是一种计数方式,亦称进位计数法或位置计数法
- 有限种数字符号来表示无限的数值
- 使用的数字符号的数目称为这种进位制的基数或底数(比如:使用的数字符号的数目为10[0-9],即为十进制)
计算机因为有高低电平两种形式,所以非常适合二进制这种形式,但是有些情况使用二进制表达太冗长了,可以使用大进制位编码二进制位来解决这个问题,八进制、十六进制满足2的n次方的要求,所以在计算机中也经常使用八进制和十六进制表达特定内容。
1.2 进制运算的基础
如下图所示:N为正整数,dx为N的自右向左的第x-1位,r为基数
二进制转换十进制:按权展开法
按权展开法与上图类似
- 整数:N=(01100101)=1×26+1×25+1×22+1=101
- 小数:N=(0.11001)=1×2-1+1×2-2+1×2-5=25/32
十进制转换为二进制:整数——重复相除法;小数——重复相乘法
- 整数
取余数自底向上N=101=(01100101)
重复除以2 | 得商 | 取余 |
---|---|---|
101/2 | 50 | 1 |
50/2 | 25 | 0 |
25/2 | 12 | 1 |
12/2 | 6 | 0 |
6/2 | 3 | 0 |
3/2 | 1 | 1 |
1/2 | 0 | 1 |
- 小数
取余数自上向下N=25/32=(0.11001)
重复乘以2 | 得积 | 取整 |
---|---|---|
25/32 | 50/32=1+9/16 | 1 |
9/16 | 18/16=1+1/8 | 1 |
1/4 | 1/4=0+1/2 | 0 |
1/4 | 1/2=0+1/2 | 0 |
1/2 | 1=1+0 | 1 |
二.二进制数据的表示方法
2.1 有符号数与无符号数
使用0表示正数,使用1表示负数,把符号位放在数字位最前面。 这就是原码表示法,上文所介绍的转换方法也是针对原码而言。
- 优点:表达简单明了,是人类最容易理解的表示方法
- 缺点:0有两种表是方法(00、10)有歧义;进行异号数运算时非常复杂
对于原码的缺点,我们希望有一种表示方法可以用正数代替负数;希望找到不同符号操作数更加简单的运算方法;希望可以使用加法操作代替剑法操作。
2.2 二进制的补码表示法
n表示x的位数
例:x=-13的补码
第一步:原码 x=1,1101
第二步:补码 x=24+1-13=100000-1101=1,0011
实现了正数替代负数,但计算补码的过程还是使用了减法。
2.3 二进制的反码表示法
反码的目的是找出原码和补码之间的规律,消除转换过程中的减法。
规律:负数的反码等于原码除符号位外按位取反,负数的补码+1。
2.4 小数的二进制补码表示
例:x=-11/32的补码
原码:x=1,0.01011
反码:x=1,1.10100
补码:x=1,1.10101
规律:负数的反码等于原码除符号位外按位取反,负数的补码+1。
三.二进制的运算
3.1 定点数与浮点数
3.1.1 定点数的表示方法
小数点固定在某个位置的数称之为定点数。表示纯小数时候,把小数点放在符号位与数值位之间;表示纯整数时候,把小数点放在符号位和数值位之后;表示既非纯整数又非纯小数时候,则应乘以比例因子(小数点左移、右移几位)以满足定点数保存格式。
3.1.2 浮点数的表示方法
为什么引入浮点数?
计算机处理的很大程度上不是纯小数或纯整数;数据范围很大,定点数难以表达。
-
表示格式:N=S×rj,S——尾数,r——基数,j——阶码
-
表示范围:假设阶码数值取m位,尾数数值取n位
-
单精度浮点数:使用4字节、32位来表达浮点数(float)
-
双精度浮点数:使用8字节、64位来表达浮点数(double)
-
浮点数的规格化:尾数规定使用纯小数;尾数最高位必须是1
例:设浮点数字长为16位,阶码位5位,尾数为11位,将十进制数 -54 表示位二进制浮点数
原码:x=1,110110
浮点数规格化:x=-0.110110×2110
阶码符号位 | 阶码数值位 | 尾数符号位 | 尾数数值位 |
---|---|---|---|
0 | 0110 | 1 | 0010100000 |
注:尾数因为是纯小数补0要在尾部补,而且尾数要变为补码。
3.1.3 定点数与浮点数的对比
- 当定点数与浮点数位数相同时,浮点数表示的范围更大
- 当浮点数位数为规格化数时,浮点数的精度更高
- 浮点数运算包含阶码和尾数,浮点数的运算更为复杂
- 浮点数在数的表示范围、精度、溢出处理、编程等方面均优于定点数
- 浮点数在数的运算规则、运算速度、硬件成本方面不如定点数