一、帶符號二進(jìn)制數(shù)表示
1、什么是字長?
計(jì)算機(jī)數(shù)據(jù)線一次能傳送的最大的二進(jìn)制數(shù)的位數(shù)。常用的字長:
8位、 16位、 32位
↓ ↓↓
z80ibmpc80386
applepc/xt80486
pc/at
2、無符號二進(jìn)制數(shù)
在字長范圍內(nèi),所有二進(jìn)制位都是數(shù)值位。
字長8位: 0~255 00h~ffh
字長16位: 0~655350000h~ffffh
字長32位: 0~4294967295 0000 0000h~ffff ffffh
3、有符號二進(jìn)制數(shù)
在字長范圍內(nèi),最高二進(jìn)制位為符號位,其余位為數(shù)值位。
字長8位:數(shù)值范圍80h~7fh-128~+127
字長16位: 8000h~7fffh-32768~+32767
字長32位: 8000 0000h~7fff ffffh-2147483648~+2147483647
二、帶符號數(shù)的補(bǔ)碼表示
在計(jì)算機(jī)中,任何一個(gè)帶符號數(shù),都是以補(bǔ)碼的形式進(jìn)行存貯和管理的。
1、帶符號數(shù)的原碼表示
最高位為符號位,其余位是數(shù)值位。
[+121]原= 0111 1011 0000000001111011
[-121]原= 1111 1001 1000000001111001
[+0]原= 0000 00000000000000000000
[-0]原= 1000 00001000000000000000
2、補(bǔ)碼表示
(1)正數(shù),同原碼
(2)負(fù)數(shù),原碼的每一位(符號位除外)取反,再在末位加1
例:字長8位,求-11的補(bǔ)碼
原碼 1000 1011
各位取反 1111 0100
末位加11111 0101
例:字長8位,求-0的補(bǔ)碼
原碼1000 0000
各位取反1111 1111
末位加1 0000 0000
還有一種辦法可以寫出一個(gè)負(fù)數(shù)的補(bǔ)碼:
令,則[x]補(bǔ)碼=, n是字長的位數(shù)
例:[-1]補(bǔ)== 1111 1111
[-127]補(bǔ)== 1000 0001
[-64]補(bǔ)==1100 0000
[-5]補(bǔ)=?。?111 1011
[-128]補(bǔ)==1000 0000
3、由補(bǔ)碼求真值(補(bǔ)碼對應(yīng)的十進(jìn)制數(shù))
原碼就是數(shù)字本身,例如:
(+7)的原碼=0000 0111 最高位為符號位(0表示正數(shù))
(–7)的原碼=1000 0111 最高位為符號位(1表示負(fù)數(shù))
反碼就是將原碼按位求反(符號位不變),例如:
(+7)的反碼=0111 1000 符號位不變
(–7)的反碼=1111 1000 符號位不變
從計(jì)算機(jī)運(yùn)算的角度來講,“符號位不變,將原碼求反再加一”的算法是很方便的,但對于讀者理解補(bǔ)碼的概念沒有多大幫助。
例如:求(–7)的補(bǔ)碼。
注意:當(dāng)負(fù)數(shù)以補(bǔ)碼的形式表示時(shí),求該數(shù)的原值仍用“求反再加一”的方法,例如,
如果是正數(shù),就不能用上述方法。正數(shù)的補(bǔ)碼就是該數(shù)的本身,所以本書中不引入“正數(shù)的補(bǔ)碼就是原碼”的概念。
其實(shí)補(bǔ)碼是針對負(fù)數(shù)來說的,計(jì)算機(jī)中只有加法器(沒有減法器),引入補(bǔ)碼的目的是為了將減法計(jì)算變?yōu)榧臃ㄓ?jì)算。
有了只有負(fù)數(shù)才有補(bǔ)碼的概念后,我們就可將注意力放在負(fù)數(shù)上。讓我們以時(shí)鐘來說明補(bǔ)碼的概念,見表1-1。
表1-1
時(shí)間
逆時(shí)針時(shí)間
0(12)
(–12)(–12)的補(bǔ)碼 = 12 – |–12| =
1
(–11)(–11)的補(bǔ)碼 = 12 – |–11| =
2
(–10)(–10)的補(bǔ)碼 = 12 – |–10| =
3
(–09)?。èC9)的補(bǔ)碼 = 12 – |–09| =
4
(–08) (–8)的補(bǔ)碼 = 12 – |–08| =
5
(–07)?。èC7)的補(bǔ)碼 = 12 – |–07| =
6
(–06)?。èC6)的補(bǔ)碼 = 12 – |–06| =
7
(–05)?。èC5)的補(bǔ)碼 = 12 – |–05| =
8
(–04) (–4)的補(bǔ)碼 = 12 – |–04| =
9
(–03)?。èC3)的補(bǔ)碼 = 12 – |–03| =
10
(–02) (–2)的補(bǔ)碼 = 12 – |–02| =
11
(–01) (–1)的補(bǔ)碼 = 12 – |–01| =
結(jié)論:時(shí)間的表示范圍:(–12 ~ +11)
(–x)的補(bǔ)碼 = ?!〃C |–x|(模 = 狀態(tài)的個(gè)數(shù)0,1,2,…,11)
例如:求時(shí)間 –2 的補(bǔ)碼。
(–2)的補(bǔ)碼 = 12 – |–2| = 10
例如:通過補(bǔ)碼將減法轉(zhuǎn)為加法。
11–10 = 11 +(–10)的補(bǔ)碼 = 11+2 = 13(13 – 12 = 1)
11–1 = 11 +(–1)的補(bǔ)碼 = 11+11 = 22(22 – 12 = 10)
12–12 = 12 +(–12)的補(bǔ)碼 = 12+0 = 12(12 – 12 = 0)
將補(bǔ)碼用于1個(gè)字節(jié):
模==128(模 = 狀態(tài)的個(gè)數(shù) 0~127)(127=7fh)
(–1)的補(bǔ)碼 = 128 – |–1|=128–1=127(7fh),再加上符號位,即為0ffh
(–2)的補(bǔ)碼 = 128 – |–2|=128–2=126(7eh),再加上符號位,即為0feh
(
(–127)的補(bǔ)碼 = 128 – |–127|=128–127=1(01h),再加上符號位,即為81h
(–128)的補(bǔ)碼 = 128 – |–128|=128–128=0(00h),再加上符號位,即為80h
1 個(gè)字節(jié)可表示的數(shù):(–128 ~ 127)
將補(bǔ)碼用于1個(gè)字:
模==32768(模=狀態(tài)的個(gè)數(shù)0~32767) (32767=7fffh)
(–1)補(bǔ)=32768–|–1|=32768–1=32767(7fffh),再加上符號位,即為0ffffh
(–2)補(bǔ)=32768–|–2|=32768–2=32766(7ffeh),再加上符號位,即為0fffeh
(
(–32767)補(bǔ)=32768–|–32767|=1(0001h),再加上符號位,即為8001h
(–32768)補(bǔ)=32768–|–32768|=0(0000h),再加上符號位,即為8000h
1個(gè)字可表示的數(shù):(–32768 ~ 32767)
4、補(bǔ)碼的應(yīng)用
1、補(bǔ)碼的運(yùn)算規(guī)則
[x+y]= [x] +[y]
[x-y]= [x] +[-y]
2、引進(jìn)補(bǔ)碼后,減法可以變成加法
例1:8-2=[8]+[-2] =+6
0000 1000
+ 1111 1110→-2補(bǔ)碼
丟失 ← 1 0000 0110
例2:64-(-10)=[64]+[10]?。?4
0100 0000
+ 0000 1010
0100 1010
例3:64-10=[64]+[-10]=54
0100 0000
+ 1111 0110
1 0011 0110