單片機(jī)中的數(shù)是以二進(jìn)制表示的,分為有符號數(shù)和無符號數(shù)兩種。
有符號數(shù)的表示方法
有符號數(shù)是指有“ (正)”、“ ? (負(fù))”符號的數(shù)。由于單片機(jī)采用二進(jìn)制數(shù),所以只有“1 ”和“0”兩種數(shù)字,其中用“ 0 ”表示“ ”,用“ 1 ”表示“ ? ” 。單片機(jī)中的數(shù)據(jù)一般只有8位,一般規(guī)定最高位為符號位,因?yàn)橐?位表示數(shù)的符號,所以只有7位用來表示數(shù)值,可以表示? 127~ 128。
有符號數(shù)的表示方法有 3 種:原碼、反碼和補(bǔ)碼。同一有符號數(shù),用 3 種表示方法得到的數(shù)是不同的。下面用3種方法來表示兩個有符號數(shù) 1011101和? 1011101。
(1)原碼
用“1”表示“?”,用“0”表示“ ”,其他各數(shù)保持不變,采用這種方法表示出來的數(shù)稱為原碼。
1011101用原碼表示是01011101,可寫成[01011101] 原。
? 1011101用原碼表示是11011101,可寫成[11011101] 原。
(2)反碼
反碼是在原碼的基礎(chǔ)上求得的。對于正的有符號數(shù),其反碼與原碼相同;對于負(fù)的有符號數(shù),其反碼除符號位與原碼相同外,其他各位數(shù)由原碼各位數(shù)取反得到。
1011101用反碼表示是01011101,可寫成[01011101] 反。
? 1011101用反碼表示是10100010,可寫成[10100010] 反。
(3)補(bǔ)碼
補(bǔ)碼是在反碼的基礎(chǔ)上求得的。對于正的有符號數(shù),其補(bǔ)碼與反碼、原碼相同;對于負(fù)的有符號數(shù),其補(bǔ)碼除符號位與反碼一致外,其他數(shù)由反碼加1得到。
1011101用補(bǔ)碼表示是01011101,可寫成[01011101] 補(bǔ)。
? 1011101用補(bǔ)碼表示是10100011,可寫成[10100011] 補(bǔ)。
有符號數(shù)的運(yùn)算
用原碼表示有符號數(shù)簡單、直觀,但在單片機(jī)中,如果采用原碼進(jìn)行減法運(yùn)算,需要很復(fù)雜的硬件電路;如果用補(bǔ)碼,可以將減法運(yùn)算變?yōu)榧臃ㄟ\(yùn)算,從而省去減法器而簡化硬件電路。
例如:用二進(jìn)制減法運(yùn)算和補(bǔ)碼加法運(yùn)算分別計(jì)算35 ? 21。
① 二進(jìn)制減法運(yùn)算:35 ? 21=00100011 ? 00010101=00001110
② 用補(bǔ)碼加法運(yùn)算。
先將算式轉(zhuǎn)換成補(bǔ)碼形式,35 ? 21=[ 35] [ ? 21]= [00100011] 原 [10010101] 原 =[00100011] 反 [11101010] 反 =[00100011] 補(bǔ) [11101011] 補(bǔ)。
再對補(bǔ)碼進(jìn)行二進(jìn)制加法運(yùn)算:
從上面的運(yùn)算過程可以看出,補(bǔ)碼的符號也參與運(yùn)算,在8位單片機(jī)中,由于數(shù)據(jù)長度只能有8位,上式結(jié)果有9位,第9位會自然丟失,補(bǔ)碼加法的運(yùn)算結(jié)果與二進(jìn)制減法的運(yùn)算結(jié)果是一樣的,都是00001110=14。
由此可見,用補(bǔ)碼的形式進(jìn)行運(yùn)算,可以將減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算,運(yùn)算結(jié)果仍是正確的,所以單片機(jī)普遍采用補(bǔ)碼的形式表示有符號數(shù)。
無符號數(shù)的表示方法
無符號數(shù)因?yàn)椴挥梅栁唬?8 位全部用來表示數(shù)據(jù),所以這種方法可以表示的數(shù)據(jù)范圍是 0 ~ 255 。 8位二進(jìn)制數(shù)的不同表示方式的換算關(guān)系見表1-6。
表1-6 8位二進(jìn)制數(shù)的不同表示方式的換算關(guān)系
表1-6
續(xù)表
表1-6
從表1-6中可以看出,對于同一個二進(jìn)制數(shù),當(dāng)采用不同的表示方式時,得到的數(shù)值是不同的,特別是大于10000000的有符號數(shù)。若想確切知道單片機(jī)中的二進(jìn)制數(shù)所對應(yīng)的十進(jìn)制數(shù)是多少,先要了解該二進(jìn)制數(shù)是有符號數(shù)還是無符號數(shù),再換算出該二進(jìn)制數(shù)對應(yīng)的十進(jìn)制數(shù)。