安防之家讯:数值数据分为有符号数和无符号数。无符号数最高位表示数值,而有符号数最高位表示符号。有符号数有不同的编码方式,常用的是补码。
(1)原码:
最高位表示符号(正数用 0, 负数用 1 ),其它位为该数的二进制数值,称为有符号数的原码表示。
① 小数原码的定义
[X] 原 =
X
0≤X < 1
1 - X
- 1 < X ≤ 0
例如: X=+0.1011 , [X] 原 = 0.1011
X= - 0.1011 [X] 原 = 1.1011
② 整数原码的定义
[X] 原 =
X
0≤X <
- X
- < X ≤ 0
【例】
X=45D=00101101B [X] 原 = 00101101B
X=-45D [X] 原 =10101101B
原码表示简单易懂,但若是两个异号数相加(或两个同号数相减) , 就要做减法。为了把减法运算转换为加法运算就引进了反码和补码。
(2)反码:
正数的反码与原码相同,符号位用 0 表示,数值位不变。负数的反码符号位用 1 表示 , 数值位为原码数值位按位取反形成,即 0 变 1 、 1 变 0 。
① 小数反码的定义
[X] 反 =
X
0≤X < 1
2 - - X
- 1 < X ≤ 0
例如: X=+0.1011 [X] 反 = 0.1011
X= - 0.1011 [X] 反 = 1.0100
② 整数反码的定义
[X] 反 =
X
0≤X <
- 1 - X
- < X ≤ 0
【例】 X=45D=00101101B, [X] 反 =00101101B
X=-45D [X] 反 =11010010B
( 3 )补码:
正数的补码与原码相同,即符号位用 0 表示,数值位不变。负数的补码为反码加 1 形成。
① 小数补码的定义
[X] 补 =
X
0≤X < 1
2 + X
- 1 ≤ X < 0
例如: X=+0.1011, [X] 补 = 0.1011
X= - 0.1011, [X] 补 = 1.0101
② 整数补码的定义
[X] 补 =
X
0≤X <
+ X
- ≤ X < 0
【例】 X=45D=00101101B [X] 补 =00101101B
X=-45 D [X] 补 =11010011B
(4)符号扩展:
在数据处理时,有时需要把 8 位二进制数扩展成 16 位二进制数。
当要扩展的数是无符号数时,可在最高位前扩展 8 个 0 。
如果要扩展的数是补码形式的有符号数,那么就要进行符号位的扩展。符号扩展后,其结果仍是该数的补码。
(5)数据的表示范围和大小
n 位二进制数能表示的无符号整数的范围是 :
0 ≤ I ≤ ;
n 位二进制数能表示的有符号整数的范围是 :
- ≤ I ≤ +-1
(6)补码的加法和减法
1 、运算规则
[X + Y] 补 = [X] 补 + [Y] 补
[X - Y] 补 = [X] 补 + [ - Y] 补
若已知 [Y] 补 ,求 [ - Y] 补 的方法是:将 [Y] 补 的各位(包括符号位)逐位取反再在最低位加 1 即可。
例如: [Y] 补 = 101101 [ - Y] 补 = 010011
2 、溢出判断,一般用双符号位进行判断:
符号位 00 表示正数 11 表示负数
结果的符号位为 01 时,称为上溢;为 10 时,称为下溢
例题:设 x=0.1101 , y= - 0.0111 ,符号位为双符号位
用补码求 x+y , x - y
[x] 补 +[y] 补 =00 1101+11 1001=00 0110
[x - y] 补 =[x] 补 +[ - y] 补 =00 1101+00 0111=01 0100
结果错误,正溢出
补码的特性: [[ X ] 补]补 ==> [- X ] 补
[[-X]补]补 ==> [ X ] 补
补码的加法规则: [ X+Y ] 补 =[ X ] 补+ [ Y ] 补
补码的减法规则: [ X - Y ] 补 =[ X ] 补+ [- Y ] 补
安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/