网络容量:
- 1 Byte = 8 bits (1 字节 = 8 比特位)
- 容量单位:
- 为什么网上买的移动硬盘500G但格式化之后只有465G了?
因为硬盘商一般用10进位标记容量(即 1G = 1000MB),即:
500 ∗ 100 0 3 102 4 3 ≈ 465 \frac {500 * 1000^3}{1024^3} \approx 465 10243500∗10003≈465
换算下来就是465G。
网络速度:
- 网络常用单位为:Mbps (Mbit/s)
- 为什么电信拉的100M光纤,测试时峰值速度只有12M每秒?
这里的100M并不是容量,而是网络速度。他这里的100 M其实指的是100 Mbps,也就是100 Mbit/s。
100 Mbit/s = (100/8) MB/s = 12.5 MB/s
CPU速度:
- CPU的速度一般体现为CPU的时钟频率(单位:赫兹Hz)
- 主流CPU的时钟频率都在2GHz以上
- Hz其实就是秒分之一,比如蜜蜂的翅膀每秒震动400次,那么蜜蜂翅膀的震动频率大概是400Hz。
- CPU频率表示的其实就是高低电平每秒变换的次数。2GHz = 2 * 100 0 3 1000^3 10003Hz = 每秒20亿次,Ghz即十亿赫兹(10^9 Hz)
计算机的字符与编码集:
一开始的ASCII码:
- 使用七个bit就可以完全表示ASCII码
- 包含95个可打印字符和33个不可打印字符(控制字符)。
- 95 + 33 = 128 = 2 7 2^7 27
但由于很多应用或者国家中的符号都无法表示,比如" ≈ \approx ≈, π \pi π"等字符ASCII都没有,因此第一次对ASCII进行扩充(Extended ASCII)。7bits ⇒ 8bits。
中文编码集:
- GB2312,是我国最早最完备的一个编码集,但不符合国际标准。
- GBK,向下兼容GB2312,向上支持国际ISO标准,但只是本地化的编码,也就是只能在中国用,如果跨国使用会有问题。
- Unicode,兼容全球的字符集。UTF-8以字节为单位对Unicode进行编码。Unicode定义了世界通用的符号集合。
- 编程推荐使用UTF-8编码,Windows系统默认使用GBK编码。
整数二进制转十进制:按权展开法
例:将二进制11101101转化为十进制
11101101 = 1 ∗ 2 0 + 1 ∗ 2 2 + 1 ∗ 2 3 + 1 ∗ 2 5 + 1 ∗ 2 6 + 1 ∗ 2 7 = 237 11101101 = 1 * 2^0 + 1 * 2^2 + 1 * 2^3 + 1 * 2^5 + 1 * 2^6 + 1 * 2^7 = 237 11101101=1∗20+1∗22+1∗23+1∗25+1∗26+1∗27=237
整数十进制转二进制:重复相除法
例:将十进制101转化为二进制
即 101 = 1100101
小数二进制转十进制:按权展开法
例:
小数十进制转二进制:重复相乘法
例:
原码表示法:
- 使用0表示正数,1表示负数
- 规定符号位位于数值第一位。
例: - 便于人类理解,简单明了
缺点:
- 0有两种表示形式:00、10,有歧义
- 原码运算非常复杂,特别是两个操作数的符号不同的时候:
(1) 判断两个操作数的绝对值大小
(2) 用绝对值大的数减绝对值小的数
(3) 对于符号值,以绝对值大的为准
补码:
- 引进补码目的:
- 减法运算复杂,希望找到使用正数代替负数的方法
- 是用加法代替减法操作,从而消除减法
- 补码定义:
例1:求x = 13的二进制原码和补码
原码:x = 13 = 0,1101
补码:x = 13 = 0,1101
例2:求x = -13的二进制原码和补码
原码:x = -13 = 1,1101
补码:x = -13 =
2
4
+
1
2^{4+1}
24+1 - 13 = 100000 - 1101 = 10011 = 1,0011
由例2可知,在计算补码的过程中,还是使用了减法!
反码:
- 引进反码的目的:找出原码和反码之间的规律,消除转换过程中的减法。
- 反码定义:
例1:求x = -13的二进制原码和反码
原码:x = -13 = 1,1101
补码:x = -13 = (
2
4
+
1
2^{4+1}
24+1 - 1) - 13 = 011111 - 1101 = 10010 = 1,0010
由下图:
可以得出三个结论:
- 正数的原码、反码、补码相同
- 负数的反码等于原码除符号位外按位取反
- 负数的补码等于反码 + 1
小数的补码:
例1:求 x =
6
19
\frac 6{19}
196的二进制原码、反码和补码
原码:0, 0.1001
反码:0, 0.1001
补码:0, 0.1001
例2:求 x = -
11
32
\frac {11}{32}
3211的二进制原码、反码和补码
原码:1, 0.01011
反码:1, 1.10100
补码:1, 1.10101
定点数:
- 定义:小数点固定在某个位置上的数称之为定点数
- 定点数的表示方式:
注:如果要表达的数字既不是纯小数(整数部分是0的小数),也不是纯整数,则需要乘以比例因子以满足定点数的保存格式。
示例:
左面的小数,默认的小数点就在符号位和数值位之间,小数点是不用表示出来的,右面的整数,默认的小数点位于数值位的后面。
对于既不是纯小数也不是纯整数的,比如10.01,则需要把小数点左移2位或右移2位以满足纯小数或纯整数的保存格式。
浮点数:
- 为什么有了定点数还需要使用浮点数呢?
- 计算机处理的很大程度上不是纯小数或纯整数
- 数据范围太大,定点数难以表达
- 定点数不够灵活
浮点数的表示形式:
任意一个十进制数N可以写成:
N
=
1
0
E
×
M
N = 10^E \times M
N=10E×M
同样的,在计算机中一个任意二进制数N可以写成
N
=
2
e
×
M
N = 2^e \times M
N=2e×M
其中,M称为浮点数的尾数,是一个纯小数。e是比例因子的指数,称为浮点数的指数,是一个整数。比例因子的基数2对二进记数制的机器是一个常数。
在早期计算机中,一个机器浮点数由阶码和尾数及其符号位组成:
后来为了便于软件移植,按IEEE754标准,32位浮点数和64位浮点数的标准格式位:
不论是32位浮点数还是64位浮点数,由于基数2是固定常数,对每一个浮点数都一样,所以不必用显示方式来表示它。
32位的浮点数中,S是浮点数的符号位,占1位,安排在最高位,S = 0 表示正数,S = 1表示负数。M是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边,E是阶码,占用8位,阶符采用隐含方式,即采用移码的方法来表示正负指数。采用这种方式时,将浮点数的指数e变成阶码E时,应将指数e加上一个固定的偏移值127(01111111),即E = e + 127(指数e = 阶码E - 127)。
对于规格化浮点数,32位浮点数表示中,E的范围是1 ~ 254,真正的指数值e则为-126 ~ +127。64位浮点数表示中,E的范围是1 ~ 2046,真正的指数值e为-1022 ~ 1023。注:底数是2。
浮点数的规格化表示:当尾数的值不为0时,尾数域的最高有效位必须是1。例如:
在IEEE754标准中,一个规格化的32位浮点数 x 可以表示为:
x
=
(
−
1
)
S
×
(
1.
M
)
×
2
E
−
127
x = (-1)^S \times (1.M) \times 2^{E-127}
x=(−1)S×(1.M)×2E−127
e
=
E
−
127
e = E - 127
e=E−127
其中尾数域所表示的值是1.M。由于规格化的浮点数的尾数域最左位(最高有效位)总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。于是用23位字段可以存储24位有效数。
64位的浮点数中符号位1位,阶码域11位,尾数域52位,指数偏移量是 1023,因此规格化的65位浮点数 x 可以表示为: x = ( − 1 ) S × ( 1. M ) × 2 E − 1023 x = (-1)^S \times (1.M) \times 2^{E-1023} x=(−1)S×(1.M)×2E−1023 e = E − 1023 e = E - 1023 e=E−1023
示例:
指数e = 阶码 - 127 = 10000010 - 01111111 = 00000011 = 3
注意:浮点数的尾数是一个纯小数!!!