安防之家讯:一、带符号二进制数表示
1、什么是字长?
计算机数据线一次能传送的最大的二进制数的位数。常用的字长:
8位、 16位、 32位
↓ ↓↓
Z80IBMPC80386
ApplePC/XT80486
PC/AT
2、无符号二进制数
在字长范围内,所有二进制位都是数值位。
字长8位: 0~255 00H~FFH
字长16位: 0~655350000H~FFFFH
字长32位: 0~4294967295 0000 0000H~FFFF FFFFH
3、有符号二进制数
在字长范围内,最高二进制位为符号位,其余位为数值位。
字长8位:数值范围80H~7FH-128~+127
字长16位: 8000H~7FFFH-32768~+32767
字长32位: 8000 0000H~7FFF FFFFH-2147483648~+2147483647
二、带符号数的补码表示
在计算机中,任何一个带符号数,都是以补码的形式进行存贮和管理的。
1、带符号数的原码表示
最高位为符号位,其余位是数值位。
[+121]原= 0111 1011 0000000001111011
[-121]原= 1111 1001 1000000001111001
[+0]原= 0000 00000000000000000000
[-0]原= 1000 00001000000000000000
2、补码表示
(1)正数,同原码
(2)负数,原码的每一位(符号位除外)取反,再在末位加1
例:字长8位,求-11的补码
原码 1000 1011
各位取反 1111 0100
末位加11111 0101
例:字长8位,求-0的补码
原码1000 0000
各位取反1111 1111
末位加1 0000 0000
还有一种办法可以写出一个负数的补码:
令,则[x]补码=, n是字长的位数
例:[-1]补== 1111 1111
[-127]补== 1000 0001
[-64]补==1100 0000
[-5]补= =1111 1011
[-128]补==1000 0000
3、由补码求真值(补码对应的十进制数)
原码就是数字本身,例如:
(+7)的原码=0000 0111 最高位为符号位(0表示正数)
(–7)的原码=1000 0111 最高位为符号位(1表示负数)
反码就是将原码按位求反(符号位不变),例如:
(+7)的反码=0111 1000 符号位不变
(–7)的反码=1111 1000 符号位不变
从计算机运算的角度来讲,“符号位不变,将原码求反再加一”的算法是很方便的,但对于读者理解补码的概念没有多大帮助。
例如:求(–7)的补码。
注意:当负数以补码的形式表示时,求该数的原值仍用“求反再加一”的方法,例如,
如果是正数,就不能用上述方法。正数的补码就是该数的本身,所以本书中不引入“正数的补码就是原码”的概念。
其实补码是针对负数来说的,计算机中只有加法器(没有减法器),引入补码的目的是为了将减法计算变为加法计算。
有了只有负数才有补码的概念后,我们就可将注意力放在负数上。让我们以时钟来说明补码的概念,见表1-1。
表1-1
时间
逆时针时间
0(12)
(–12)(–12)的补码 = 12 – |–12| =
1
(–11)(–11)的补码 = 12 – |–11| =
2
(–10)(–10)的补码 = 12 – |–10| =
3
(–09) (–9)的补码 = 12 – |–09| =
4
(–08) (–8)的补码 = 12 – |–08| =
5
(–07) (–7)的补码 = 12 – |–07| =
6
(–06) (–6)的补码 = 12 – |–06| =
7
(–05) (–5)的补码 = 12 – |–05| =
8
(–04) (–4)的补码 = 12 – |–04| =
9
(–03) (–3)的补码 = 12 – |–03| =
10
(–02) (–2)的补码 = 12 – |–02| =
11
(–01) (–1)的补码 = 12 – |–01| =
结论:时间的表示范围:(–12 ~ +11)
(–x)的补码 = 模 – |–x|(模 = 状态的个数0,1,2,…,11)
例如:求时间 –2 的补码。
(–2)的补码 = 12 – |–2| = 10
例如:通过补码将减法转为加法。
11–10 = 11 +(–10)的补码 = 11+2 = 13(13 – 12 = 1)
11–1 = 11 +(–1)的补码 = 11+11 = 22(22 – 12 = 10)
12–12 = 12 +(–12)的补码 = 12+0 = 12(12 – 12 = 0)
将补码用于1个字节:
模==128(模 = 状态的个数 0~127)(127=7FH)
(–1)的补码 = 128 – |–1|=128–1=127(7FH),再加上符号位,即为0FFH
(–2)的补码 = 128 – |–2|=128–2=126(7EH),再加上符号位,即为0FEH
(
(–127)的补码 = 128 – |–127|=128–127=1(01H),再加上符号位,即为81H
(–128)的补码 = 128 – |–128|=128–128=0(00H),再加上符号位,即为80H
1 个字节可表示的数:(–128 ~ 127)
将补码用于1个字:
模==32768(模=状态的个数0~32767) (32767=7FFFH)
(–1)补=32768–|–1|=32768–1=32767(7FFFH),再加上符号位,即为0FFFFH
(–2)补=32768–|–2|=32768–2=32766(7FFEH),再加上符号位,即为0FFFEH
(
(–32767)补=32768–|–32767|=1(0001H),再加上符号位,即为8001H
(–32768)补=32768–|–32768|=0(0000H),再加上符号位,即为8000H
1个字可表示的数:(–32768 ~ 32767)
4、补码的应用
1、补码的运算规则
[x+y]= [x] +[y]
[x-y]= [x] +[-y]
2、引进补码后,减法可以变成加法
例1:8-2=[8]+[-2] =+6
0000 1000
+ 1111 1110→-2补码
丢失 ← 1 0000 0110
例2:64-(-10)=[64]+[10] =74
0100 0000
+ 0000 1010
0100 1010
例3:64-10=[64]+[-10]=54
0100 0000
+ 1111 0110
1 0011 0110
安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/