72
数数数数数数数 数数数数数数数

计算机科学引论

  • Upload
    maddox

  • View
    160

  • Download
    0

Embed Size (px)

DESCRIPTION

计算机科学引论. 数的表示和存储. 主要内容. 用数表示各种信息 数和进位制 数的存储. 用数表示各种信息. 计算机是实现数到数的变换的工具 大量不同的事物均可用数表示 整数、浮点数、字符…… 指令、程序…… 语音、图像、视频…… 操作抽象的数字比操作具体的物体容易 多快好省 可以利用众多的数学算法进行数到数的变换 如何用数表示人类所关心的信息?. 把所要表示的字符按某种顺序排列. 按所排列的顺序编号. 用数表示各种信息. 用数表示字符. ABCDEF ……. 123456 ……. - PowerPoint PPT Presentation

Citation preview

Page 1: 计算机科学引论

数的表示和存储

计算机科学引论

Page 2: 计算机科学引论

主要内容用数表示各种信息数和进位制数的存储

Page 3: 计算机科学引论

用数表示各种信息计算机是实现数到数的变换的工具

大量不同的事物均可用数表示 整数、浮点数、字符…… 指令、程序…… 语音、图像、视频……

操作抽象的数字比操作具体的物体容易 多快好省

可以利用众多的数学算法进行数到数的变换如何用数表示人类所关心的信息?

Page 4: 计算机科学引论

用数表示各种信息用数表示字符

A B C D E F ……1 2 3 4 5 6 ……

天 地 玄 黄 宇 宙 ……1 2 3 4 5 6 ……

把所要表示的字符按某种顺序排列

按所排列的顺序编号

Page 5: 计算机科学引论

用数表示各种信息用数表示字符

A B C D E F ……1 2 3 4 5 6 ……

天 地 玄 黄 宇 宙 ……1 2 3 4 5 6 ……

codepage 代码页 ??

Page 6: 计算机科学引论

多媒体信息的表示 用数表示字符

典型的 codepage ASCII GBK, BIG5, SJIS UTF-8, UTF-16, UTF-32, UCS-2 同一个字在不同 codepage 下用不同的数字表示 同一个数字按不同 codepage 理解可得不同文字

乱码

Page 7: 计算机科学引论

多媒体信息的表示

我本将心向明月

GBK CE D2 B1 BE BD AB D0 C4 CF F2 C3 F7 D4 C2

JIS 89 E4 96 7B 8F AB 90 53 8C FC 96 BE 8C 8E

UTF-8 E6 88 91 E6 9C AC E5 B0 86 E5 BF 83 E5 90 91 E6 98 8E E6 9C 88BIG5 A7 DA A5 BB 3F A4 DF A6 56 A9 FA A4 EB 90 91 E6 98 8E E6 9C 88

UTF-16LE 11 62 2C 67 06 5C C3 5F 11 54 0E 66 08 67

UTF-16BE 62 11 67 2C 5C 06 5F C3 54 11 66 0E 67 08

同一个字在不同 codepage 下用不同的数字表示

十六进制后面讲

Page 8: 计算机科学引论

多媒体信息的表示同一个数字按不同 codepage 理解可得不同文字

CE D2 B1 BE BD AB D0 C4 CF F2 C3 F7 D4 C2

UTF-16LE 뺱 ꮽ 쓐싔

GBK 我本将心向明月

JIS ホメアセスォミトマツBIG5 扂掛蔚陑砃隴堎

Page 9: 计算机科学引论

多媒体信息的表示用数表示字符

Codepage 标记 HTML : <meta http-equiv="Content-Type"

content="text/html; charset=utf-8" /> XML : <?xml version="1.0" encoding="UTF-8"?> 纯文本: BOM (Byte Order Mark)

UTF-8 EF BB BF ……

UTF-16 BE: FE FF …… LE: FF FE ……

ANSI :没有标记

Big-endian / little-endian 后面讲

Page 10: 计算机科学引论

多媒体信息的表示用数表示字符

文字信息在程序中的表示char *wchar_t *string

Page 11: 计算机科学引论

用数表示各种信息用数表示声音

声音的物理特性:声波

记录声音的模拟方法 用别的可变物理量“模拟”声波

如磁场大小:磁带

Page 12: 计算机科学引论

用数表示各种信息用数表示声音

“ 数字”的方法

0

15

13.3

-1.1 -0.7 0.5 2.2 3.8……

Page 13: 计算机科学引论

用数表示各种信息用数表示声音

数字方式的优势 一旦记录将不再有噪声可以混入 可以方便地存储 可以无损复制(好处?坏处?) 可以被压缩 可以被计算机方便地处理

Page 14: 计算机科学引论

用数表示各种信息用数表示图像

R=179

G=99

B=97

Page 15: 计算机科学引论

用数表示各种信息用数表示视频

多个连续数字图像组成的序列

Page 16: 计算机科学引论

用数表示各种信息用数表示指令

指令的构成 操作 操作数

“ 操作”需要的参数 编码指令的要求

编码操作 编码操作数

Page 17: 计算机科学引论

用数表示各种信息用数表示指令

编码操作 把所需要表示的操作按序排列,再逐一编号

0 add1 sub2 mul3 div4 call……

Page 18: 计算机科学引论

用数表示各种信息用数表示指令

编码操作数 操作数情况比较复杂

常量 / 变量,正数 / 负数,整数 / 小数…… 编码方案比较复杂

一个极端简化的例子 仅编码变量 总共 10 个存储单元 每个指令 3 个操作数

z=x+y

Page 19: 计算机科学引论

用数表示各种信息用数表示指令

编码操作数 编码单个操作数

把存储单元按顺序排列 顺序编号 0-9

编码一个指令的三个操作数 用三位数字编码

编码整个指令

029

z=x+y

0029

332652

11

012… 9

+

63

Page 20: 计算机科学引论

数和进位制“数”不过是一个抽象的概念,每个数用

一个特定的符号或状态代表 0123456789

共十个符号,可以表示十个数 ABCDEFGHIJKLMNOPQRSTUVWXYZ

共二十六个符号,可以表示二十六个数 世界上有六十亿人,需要定义六十亿个符号

才能表示??

Page 21: 计算机科学引论

数和进位制 用两个符号的排列可以表示比较多的数

两个 0 ~ 9 的排列可以表示 0 ~ 99 共 100 个数 0 ... 9 ... 11 ... 33 ... 78 ... 99

两个 A ~ Z 的排列可以表示 A ~ ZZ 共 676 个数 A ... Z ... BB ... EA ... MP ... ZZ

用更多个的符号,可以表示更多的数 基本符号集:少数几个表示数的基本符号 当一个数大到不能用基本符号集表示时就用多个基

本符号的排列表示

进位制

Page 22: 计算机科学引论

数和进位制 “大”数的表示

“ 位”:每个基本符号占据的位置 进位:一“位”表示不下时,在前面加一位 进位制:何时在前面加一位

“ 进位”的“制度” 简称“进制”

10 基本符号表示不了前面另加一个基本符号

6000000000前面另加很多基本符号

Page 23: 计算机科学引论

数和进位制“大”数的值

……d3 d2 d1 d0

……5 3 7 8

…… + 5x103+ 3x102+7x101+8x100

进制

有效数字阶

Page 24: 计算机科学引论

数和进位制一般的进位制

当数的大小刚好等于基本符号个数时“进位”

是等于不是大于:要表示 0

最常用的进位制:十进制 十个基本符号逢十进一原因:十指

Page 25: 计算机科学引论

数和进位制常用的“非十”进制

六十进制 1 小时 =60分 =3600秒 1甲子 =60年 1亩 =60平方丈

十二进制 1年 =12月 1 天 =12 时辰 1打 =12 个 1英尺 =12英寸

Page 26: 计算机科学引论

计算机使用的进位制计算机对进位制的要求

要简单:容易实现 可与十进制等价:人们最常用的进位制

简单:符号越少越简单 存储: N 个符号的进位制,存储单元就要有

N 个不同的物理状态运算: N 个符号的进位制,加法需要 NxN条规则

Page 27: 计算机科学引论

计算机使用的进位制0 个符号?

没有这样的进位制一个符号:一进制?

计算机不仅要表示数,还要运算:运算意味着变化,只有一个符号无法表示变化

一进制在数学上不能与十进制等价 如何表示 0 ?

Page 28: 计算机科学引论

计算机使用的进位制二个符号:二进制

既可以表示数,也可以表示变化 数学上可以与十进制等价

计算机都用二进制 计算机使用二进制并不意味着程序也必须使

用二进制 编译连接程序:用二进制、十进制、十六进制等 工资报表程序:通常用十进制 科学计算程序:可能用任意进制

Page 29: 计算机科学引论

二进制表示数的符号

0 , 1进位制

逢二进一表示

书写: 11012

汇编: 1101b

Page 30: 计算机科学引论

二进制二进制数的值

d31d30 ... d2d1d0

value=d31x 231 + ... + d1 x 21 + d0 x 20

例: 1011 = 1x23 + 0x22 + 1x21 + 1x20

= 8 + 0 + 2 + 1

= 11 二进制转换成十进制的方法

Page 31: 计算机科学引论

二进制十进制数转换成二进制数

112=5…1

1

5 2=2…1

1

2 2=1…0

01 2=0…1

1

Page 32: 计算机科学引论

十六进制 人类的阅读和记忆习惯

“ 进制”很高:可接受很大数量的符号 例:汉语

短时记忆很小:仅可记忆几个到十几个字 处理差异很小的符号时容易出错

二进制不适合人们阅读和记忆 0001 1001 0111 1000 0000 0010 0010 0110

很长但类似的符号,不符合人们的习惯 转换成十进制?

麻烦 更简单的表示:十六进制

0x19780226

Page 33: 计算机科学引论

十六进制和二进制的相互转换1010 0010 0011 0110

A 2 3 6

需要人处理的情况多用十六进制

0000 00001 10010 20011 30100 40101 50110 60111 71000 81001 91010 A1011 B1100 C1101 D1110 E1111 F

Page 34: 计算机科学引论

二进制数的特殊性质二进制数用于逻辑运算

二进制数非常适合用于逻辑运算 二值逻辑可以用二进制数方便表示:真 /假 二值逻辑的运算可以用二进制数方便实现

输入 输出 0 0 0 0 1 0 1 0 0 1 1 1

输入 输出 0 0 0 0 1 1 1 0 1 1 1 1

输入 输出 0 1 1 0

Page 35: 计算机科学引论

二进制数的特殊性质二进制数用于逻辑运算

二值逻辑的重要性 数学上,基于二值逻辑的数理逻辑体系可以与实

数域的数学体系等价 微积分课程中会学到

二值逻辑功能可以用电子元件方便地实现 整数运算可以化解成二值逻辑

现代数字电路的理论基础 现代数字电子计算机的基础

二值逻辑在编码、加密等领域有重要应用

Page 36: 计算机科学引论

二进制数的特殊性质基于二值逻辑的二进制数存储单元

最简单的触发器

数字电路之于模拟电路的一个重要优点是可以方便地实现数据的精确无限时存储!

Page 37: 计算机科学引论

二进制数的加法 0+0=0 0+1=1 1+0=1 1+1=?

1

+ 1

10

进位

Page 38: 计算机科学引论

二进制数的加法多位二进制数的加法

10+7=17 1 0 1 0

+ 0 1 1 1

-------------------------1

1

0

1

01 0

全加器:把三个二进制数相加,输出两个二进制数(和与进位)

0 0

Page 39: 计算机科学引论

二进制数的加法一位全加器

Si

Ci+1

Ai

Bi

Ci

输入 输出 0 0 0 0 1 1 1 0 1 1 1 0

异或

Page 40: 计算机科学引论

二进制数的加法多位全加器

A, B C0

SumCarry

Page 41: 计算机科学引论

二进制数的减法 0-0=0 1-0=1 1-1=0 0-1=?

0-1=-1 ,但是我们现在还不能表示负数!

Page 42: 计算机科学引论

负数的表示 数的符号:+ /-

用一位二进制数可以表示: 0->+ , 1->- 用最高位表示符号:原码

10000000000000000000000000000001 : -110

00000000000000000000000000000001 : +110

问题 0x10000001+0x00000001=?

必须考虑符号位 0x00000000=010 , 0x80000000=010

两个 0 ?

符号位 有效位

Page 43: 计算机科学引论

负数的表示反码(基一的补码):各位取反

710 = 001112 -710 = 110002

710+( -710 )= 001112+ 110002= 111112

-010

看上去很美取反

111112

00002-

+0-0 ?+0: 000002

-0: 111112

Page 44: 计算机科学引论

负数的表示究竟该如何表示负数?

越简单越好如何才能简单?

实际的使用借位的减法运算: 3 - 4 => …0011 - …0100 = …1111

既然运算结果如此,我们就用这个结果表示负数

-N = 0-N (用二进制借位运算) 基二的补码:简称补码

Page 45: 计算机科学引论

负数的表示2N-1 个非负数2N-1 个负数一个 0几个正数?

00000 0000100010

1111111110

10000 0111110001

0 12

-1-2

-15 -16 15

.

.

.

.

.

.

-311101

-411100

Page 46: 计算机科学引论

负数的表示 二进制补码转换成十进制数

d31 x -231 + d30 x 230 + ... + d2 x 22 + d1 x 21 + d0 x 20

例: 1111 1111 1111 1111 1111 1111 1111 11002

= 1x-231 +1x230 +1x229+... +1x22+0x21+0x20

= -231 + 230 + 229 + ... + 22 + 0 + 0

= -2,147,483,64810 + 2,147,483,64410

= -410

Page 47: 计算机科学引论

负数的表示改变符号:取反加 1

例 : -4 -> +4 -> -4x : 1111 1111 1111 1111 1111 1111 1111 11002

x’: 0000 0000 0000 0000 0000 0000 0000 00112

+1: 0000 0000 0000 0000 0000 0000 0000 01002

()’: 1111 1111 1111 1111 1111 1111 1111 10112

+1: 1111 1111 1111 1111 1111 1111 1111 11002

Page 48: 计算机科学引论

1111 1111 1111 11002

1111 1111 1111 1111 1111 1111 1111 11002

负数的表示符号扩展

补码非负数有无限个前导 0补码负数有无限个前导 1 在补码前面添加符号位,值不变

Page 49: 计算机科学引论

负数的表示加法与减法

用补码表示的数,做加法和减法时可以不考虑符号位与有效位的区别,直接当作一个整体进行运算

例: 4 位补码运算 2+3=5

0 0 1 0+ 0 0 1 1------------ 0 1 0 1

2-5=-3

0 0 1 0- 0 1 0 1------------ 1 1 0 1

1 11

符号位和普通有效位一起运算

Page 50: 计算机科学引论

有符号数和无符号数有符号数

C 类型: int 用补码表示

无符号数 C 类型: unsigned 没有符号表示的问题,所以所有位都是数的

有效位

Page 51: 计算机科学引论

有符号数和无符号数 X = 1111 1111 1111 1111 1111 1111 1111 11002

Y = 0011 1011 1001 1010 1000 1010 0000 00002

X > Y? unsigned: signed:

用补码表示的数,有符号数和无符号数的加法/减法运算法则相同

Page 52: 计算机科学引论

数的存储一位二进制数的存储

各种触发器、锁存器 存储单元 单位: bit

多位二进制数的存储 多个存储单元组成的阵列

最常用的单位:字节 8 位

8 位16 位

Page 53: 计算机科学引论

数的存储内存的结构

一个大的字节矩阵 内存的最小可访问单元通常是

字节数据在内存中的存储

8 位或更小的数据(如bool )

存储在一个字节中 更大的数据

存储在连续的多个字节中

……

012345

字节

Page 54: 计算机科学引论

数的存储数据在内存中的存储

8 位数据16 位数据 32 位数据 64 位数据

字节

Page 55: 计算机科学引论

数的存储内存中可能存储多个数。如何区分?

把内存按字节编号 用存储一个数的所有内存单元的最小编号来

表示该数 地址

0 1 2 3 4 5 6 7

Page 56: 计算机科学引论

数的存储地址

数存储的“位置”并非数的“值”通常从 0开始编号通常用十六进制

12340 1 2 3 4 5 6 7

地址: 1

值: 1234

Page 57: 计算机科学引论

数的存储内存单元的值是可以改变的

这是内存的基本功能:存储不同的值 现实世界存在经常变化的量

变量

Page 58: 计算机科学引论

数的存储变量

用于存储某个可变数据的内存单元(们) 变量的地址

变量存储的“位置”并非变量的“值”

12340 1 2 3 4 5 6 7

16 位变量地址: 1

值: 1234

Page 59: 计算机科学引论

数的存储多字节变量的字节序

程序中常用变量占用多个字节 16 位: 2 字节; 32 位: 4 字节

0x 12 34 56 78

0 1 2 3

?

Page 60: 计算机科学引论

数的存储多字节变量的字节序

Big-endian: ( 大头在前? )

0x 12 34 56 78

0 1 2 312 34 56 78

Page 61: 计算机科学引论

数的存储多字节变量的字节序

Little-endian: ( 小头在前? )

0x 12 34 56 78

0 1 2 378 56 34 12

Page 62: 计算机科学引论

数的存储多字节变量的字节序

为何有两个字节序? 各有优缺点,不能完全战胜对方

词源 Gulliver's Travels

Jonathan Swift, 1726左右 相关内容:在小人国 (Lilliput) ,两派争执吃鸡蛋的方

式:一派支持先吃大头 (big-endians) ,另一派支持先吃小头 (little-endians) ,并引发战争

Page 63: 计算机科学引论

数的存储多字节变量的字节序

Big-endian平台 Internet, 各种 RISC, PowerMac

Little-endian平台 PC

可变平台 IBM Power, MIPS

Page 64: 计算机科学引论

数的存储用数字表示地址的优缺点

优点 便于运算 便于计算机处理 计算机在最底层总是用数字格式的地址表示变量

缺点 不便记忆 不便理解其物理含义 人类通常用物理含义明确的文字表示变量

Page 65: 计算机科学引论

数的存储矛盾

计算机希望用数字地址表示变量,人希望用名称表示变量

RoomNoZIP……

00000004……

翻译

Compiler/Assembler

Page 66: 计算机科学引论

数的存储程序语言、汇编语言

允许程序员用名称表示变量 编译器、汇编器自动根据变量的大小分配适

量的内存单元 把程序中基于名称引用变量的地方全部翻译

成基于地址引用

Page 67: 计算机科学引论

数的存储C/C++ 中定义变量

char

short

unsigned short

int

float

Gate;

ZIP;

Room;

Monitor;

Length;

类型 名称

用有明确意义的词命名变量

Page 68: 计算机科学引论

数的存储变量的声明

声明的含义:说明有某个名字的变量,但并不为其分配内存

C/C++ 语法extern int Somebody;

在那遥远的地方 有位好姑娘

Page 69: 计算机科学引论

数的存储为何需要声明

在不同的地方需要引用同一个变量

在那遥远的地方有位好姑娘…

在那遥远的地方有位好姑娘…

一个

Page 70: 计算机科学引论

数的存储为何需要声明

在不同的地方需要引用同一个变量

有位好姑娘…有位好姑娘…

两个!

Page 71: 计算机科学引论

数的存储何时需要声明

当引用别的模块所定义的变量的时候 模块:可以编译成一个 .obj 文件的源文件

一个 .c 、 .cpp 或 .asm ,或其它语言的源文件也即: (1)至少有 2 个模块; (2) 模块之间需要

用全局变量交换数据何时需要定义

任何一个变量,在与其最相关的那一个模块中定义一次即可

Page 72: 计算机科学引论