计算机码相加符号位参与运算,数值和字符表示 数位扩展和压缩 算术运算

无符号数

无符号数没有符号位,每一位都用来存放数字。n位无符号数的表示范围是0~2n-1。

二进制和八进制,十六进制之间可以快速转换

二进制

八进制000

0

001

1

010

2

011

3

100

4

101

5

110

6

111

7二进制

十六进制0000

0

0001

1

0010

2

0011

3

0100

4

0101

5

0110

6

0111

7

1000

8

1001

9

1010

A

1011

B

1100

C

1101

D

1110

E

1111

F

例:0x001BFEAB转换为二进制数

1

B

F

E

A

B0001

1011

1111

1110

1010

1011

有符号数

真值:带“+”,“-”符号的数

机器数:将“+”,“-”数字化为“0”,“1”的数

原码表示法

符号位为0表示正数,1表示负数

数值位即真值的绝对值。

[+0]原= 0 0000000

[-0]原 = 1 0000000

反码表示码

正数的反码与原码相同

负数的反码符号为“1”,数值部分求反

[+0]原= 0 0000000

[-0]原 = 1 1111111

补码表示法

对于n位数,模M的大小 = n位数全为1后并在最末位加1。

n位整数(包括符号位):M = 2n

n位小数(包括符号位):M = 2

正数的补码与原码相同

[+0]补 = [-0]补 = 0 0000000

负数可以用它的正补数来代替,这个正补数可以用模加上负数本身求得。

负数的补码符号为1,数值部分取反+1

n位补码能表示范围:-2n-2n-1

纯小数补码表示:

x = -0.1011,x补 = 2 - 0.1011 = 1.0101,最高位是符号位,小数点为隐含值。

例1:用8位补码形式表示十进制数-127

原码:11111111

反码:10000000

补码:10000001

例2:用8位补码形式表示十进制数-128

[-128]补 = M + (- 128) = 2 ^ 8 - 128 = +128 = 1000 0000

例3:已知8位补码1000 0000,将这个数转换为十进制有符号数

符号位为1,是负数

补码减1:0111 1111

取反:1000 0000

绝对值为128

十进制数为-128

数位扩展与压缩

符号扩展

直接把符号位填充到扩展位

800A( 32 bits ) -> FFFF800A( 64 bits )

0扩展

用于无符号数,高位都补0

位数压缩

原则:弃高位,留低位

F12B800A( 64 bits ) -> 800A( 32 bits )

算术运算

补码加减运算

补码加法运算公式:[x]补 + [y]补 = [x + y]补

补码减法运算公式:[x]补 + [-y]补 = [x -y]补加法运算进位规则:满二进一 减法运算借位规则:借一当二,最高位不够借,照借不误

4c824168c973e9fd21c5ca3c88769487.png

溢出判断

如果数值运算结果超出了所能表示的范围,产生溢出。两个符号相同的数相加,才可能产生溢出;两个符号相异的数相加,不可能产生溢出。

单符号法

对操作数和运算结果的符号位进行检测,当结果的符号位与操作数符号不相同时就表明发生溢出

设x的符号为Xf,y的符号为Yf,运算结果的符号为Sf:

3b88a60388a20ab669293a39275d93cf.png

若V = 0无溢出,V = 1有溢出

进位判断法

对最高数据位进位和符号进位进行检测

设运算时最高数据位产生的进位为C1,符号位产生的进位为C0

V = C0 ^ C1

若V = 0无溢出,V = 1有溢出

例:

0111 1111

+ 1

——————————————

1000 0000

C1 = 1,C2 = 0,C1 异或 C2 = 1,溢出

8位补码1000 0000转换为十进制数为:-128

双符号法(变形补码法)

用两个相同的符号位表示一个数的符号。左边第一位为S1,相邻的为S2:

00表示正数

01表示正向溢出

11表示负号

10表示负向溢出

V = S1 ^ S2

若V = 0无溢出,V = 1有溢出

如果运算结果发生溢出,S1为结果真正的符号位。

原码一位乘法

设x = xf x1 x2 … xn,y = yf y1 y2 … yn,乘积为P,乘积的符号位为Pf

Pf = xf ^ yf

|P| = |x| |y|

若yn = 1,部分积加上被乘数|x|,然后右移一位;

若yn = 0,部分积加上0,然后右移一位。

例:已知X = 0.110,Y = -0.101,用原码一位乘法求X·Y

[x]原= 00.110(用双符号表示)[Y]原 = 1.101

部分积乘数说明

0.000101乘数最后一位为1,加上x的绝对值

+0.110

—————————

0.110

>>0.0110|10将结果右移,移出部分移入乘数

+0.000乘数最后一位为0,加0

—————————

0.011

>>0.00110|1

+0.110

—————————

0.111

>>0.011110|

最后得到X·Y = (0 ^ 1)0.11 110 = 1.011110

补码一位乘法

Booth法:符号位参与运算

[XY]补 = [An]补 + (Y1-Y0) × [X]补

乘数的最后两位作为参考位

移位操作让乘数只剩下自己原来的两位时循环结束。用最后剩下的两位校正结果。

Yn 高位

Yn+1 低位

运算操作0

0

A补右移一位

0

1

(A补 + X补)右移一位

1

0

(A补 - X补)右移一位

1

1

A补 右移一位An是累加数

例1:

X = +1101

Y = +1011

用补码一位乘法求XY

初始化积寄存器A = 00 0000(双符号位)

[X]补 = 01101

[Y]补 = 01011

[-X]补 = 10011

YnYn+1操作AY

10-X补000000010110

+110011

——————————

110011010110

>>

———————————————————

1 10011|01011

1110011|01011/*空出来的第2位和第1位保持一致*/

11+01110011|01011

>>

———————————————————

1 110011|0101

11110011|0101

01+X补11110011|0101

+001101

——————————

1 00100111|0101/*进位可以忽略不进*/

>>

————————————————————

0 0100111|010

000100111|010

10-X补000100

+110011

——————————

110111111|010

>>

————————————————————

1 10111111|01

1110111111|01

------------------校正-----------------------

01+X补111011

+001101

——————————

1 001000

[XY]补 = 00100 1111

原码恢复余数除法

运算步数不能事先确定,通过相减来确定够不够减,不够减就要加回去(恢复余数)

例1:

X = +0.1001

Y = -0.1011

用原码一位除法求 X / Y

初始化商寄器Q = 0.0000

[X]原 = 00.1001

[|X|]补 = 0.1001/*绝对值和符号位分开运算*/

[Y]原 = 1.1011

[|Y|]补 = 00.1011

[-|Y|]补 = 11.0101

余数余数符号商上商

00 1001

+11 0101

————————————

11 1110 负0

+00 1011

————————————

100 1001/*恢复余数*/

<<

————————————

01 00100/*上商位移入商*/

01 0010

+11 0101

————————————

100 0111正01

<<

————————————

00 1110 01/*上商位移入商*/

00 1110

+11 0101

————————————

100 0011正011

<<

————————————

00 0110011/*上商位移入商*/

00 0110

+11 0101

————————————

11 1011负0110

+00 1011

————————————

100 0110/*恢复余数*/

<<

————————————

00 11000110/*上商位移入商*/

00 1100

+11 0101

————————————

100 0001正01101

<<

————————————

00 001001101/*上商位移入商*/

符号位:0 ^ 1 = 1

商 = 1.1101

------------------校正-----------------

余数校正 = 0.0001 * 2 ^ -4

补码不恢复余数除法

被除数 X补

除数 Y补

余数 ri ,i = 0,1,…

补码不回复余数除法的使用条件:|X| < |Y|

令r0 = X补

比较r0和Y补符号,同号上商1,异号上商0

循环 i = 1…n

ri和Y补的符号

ri+1 =同号

1

[ri]补左移一位再 - Y补

异号

0

[ri]补左移一位再 + Y补

移位操作让商只剩下自己原来的一位时循环结束,进入校正。

结果校正:符号位+1,末尾恒置1

余数校正:左移n次,余数 = 2-n × rn

例1:

X = +0.1000

Y = -0.1010

初始化商寄存器Q = 0.0000

[X]补 = 00.1000

[Y]补 = 11.0110

[-Y]补 = 00.1010

条件操作余数Q

r0 Y补异号上商000100000000|

<<

——————————

0100000000| 0/*Q的位移入余数*/

+110110

——————————

1 000110

r1 Y补异号上商0000110

<<

——————————

001100000|0 0

+110110

——————————

1 000010

r2 Y补异号上商0000010000|00

<<

——————————

00010000|00 0

+110110

——————————

11101000|000

r3 Y补同号上商111101000|001

<<

——————————

1101000|001 0

+001010

——————————

1111100|0010

-------------------校正---------------------------

结果校正:0|0010

+1|0011

—————————

1 0011

余数:2 ^ -4 × 111110

ASCII码

American Standard Code for Information Interchange

一个ASCII码字符占用1个字节的空间

b7

b6 ~ b0奇偶校验位

字符编码

除开校验位,7位能表示27 = 128个字符。其中95个是可以被打印机打印的,剩下的33个是控制字符。

扩展后的ASCII码可以表示256个编码

通常采用8 × 8点阵来输出西文字符

汉字码

汉字输入码

使用输入设备将汉字输入到计算机而专门编制的代码

输入码

数字码

拼音码

字形码

数字输入码

用数字串代表汉字

优点

缺点无重码

代码难以记忆

输入码和内部码转换方便

国标码

将6763个汉字按照使用频率分为两级

第一级汉字

3755

按拼音排序

第二级汉字

3008

按部首排序

符号,数字,字母:682个

总计7445个

区位码

将国标码的字符按位置分为94个区,每区94位。区的编号 1 - 94,区内编号也是 1 - 94。

区号

内容

个数1 - 9

图形字符区

682

10 - 15

空白区

16 -55

第一级汉字

3755

56 - 87

第二级汉字

3008

88 - 94

空白区

用4位数字串代表汉字输入

b3 - b2

b1 - b0区号

区内号

拼音输入码

以汉字拼音为基础的输入方法

优点

缺点简单方便

同音字多,重码率高

字形输入码

根据汉字的书写形状来进行编码,按照笔划用字母或数字进行编码,输入时按笔划顺序输入

优点

缺点简单方便,重码比拼音少

重码率高,需要熟悉字形结构

汉字的机内码

机器内部处理和存储汉字的代码。用两个字节来表示汉字

转换成16进制再加2020H

加8080H

转换成16进制再加A0A0H

10进制区位码

国标码

机内码

汉字字模码

用于显示输出或打印输出。用点阵表示汉字字形。至少需要16 × 16的点阵来表示,即32个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值