單片機中的數是以二進制表示的,分為有符号數和無符号數兩種。
有符号數的表示方法有符号數是指有“ (正)”、“ − (負)”符号的數。由于單片機采用二進制數,所以隻有“1 ”和“0”兩種數字,其中用“ 0 ”表示“ ”,用“ 1 ”表示“ − ” 。單片機中的數據一般隻有8位,一般規定最高位為符号位,因為要用1位表示數的符号,所以隻有7位用來表示數值,可以表示− 127~ 128。
有符号數的表示方法有 3 種:原碼、反碼和補碼。同一有符号數,用 3 種表示方法得到的數是不同的。下面用3種方法來表示兩個有符号數 1011101和− 1011101。
(1)原碼
用“1”表示“−”,用“0”表示“ ”,其他各數保持不變,采用這種方法表示出來的數稱為原碼。
1011101用原碼表示是01011101,可寫成[01011101] 原。
− 1011101用原碼表示是11011101,可寫成[11011101] 原。
(2)反碼
反碼是在原碼的基礎上求得的。對于正的有符号數,其反碼與原碼相同;對于負的有符号數,其反碼除符号位與原碼相同外,其他各位數由原碼各位數取反得到。
1011101用反碼表示是01011101,可寫成[01011101] 反。
− 1011101用反碼表示是10100010,可寫成[10100010] 反。
(3)補碼
補碼是在反碼的基礎上求得的。對于正的有符号數,其補碼與反碼、原碼相同;對于負的有符号數,其補碼除符号位與反碼一緻外,其他數由反碼加1得到。
1011101用補碼表示是01011101,可寫成[01011101] 補。
− 1011101用補碼表示是10100011,可寫成[10100011] 補。
有符号數的運算用原碼表示有符号數簡單、直觀,但在單片機中,如果采用原碼進行減法運算,需要很複雜的硬件電路;如果用補碼,可以将減法運算變為加法運算,從而省去減法器而簡化硬件電路。
例如:用二進制減法運算和補碼加法運算分别計算35 − 21。
① 二進制減法運算:35 − 21=00100011 − 00010101=00001110
② 用補碼加法運算。
先将算式轉換成補碼形式,35 − 21=[ 35] [ − 21]= [00100011] 原 [10010101] 原 =[00100011] 反 [11101010] 反 =[00100011] 補 [11101011] 補。
再對補碼進行二進制加法運算:
從上面的運算過程可以看出,補碼的符号也參與運算,在8位單片機中,由于數據長度隻能有8位,上式結果有9位,第9位會自然丢失,補碼加法的運算結果與二進制減法的運算結果是一樣的,都是00001110=14。
由此可見,用補碼的形式進行運算,可以将減法運算轉換為加法運算,運算結果仍是正确的,所以單片機普遍采用補碼的形式表示有符号數。
無符号數的表示方法無符号數因為不用符号位, 8 位全部用來表示數據,所以這種方法可以表示的數據範圍是 0 ~ 255 。 8位二進制數的不同表示方式的換算關系見表1-6。
表1-6 8位二進制數的不同表示方式的換算關系
表1-6
續表
表1-6
從表1-6中可以看出,對于同一個二進制數,當采用不同的表示方式時,得到的數值是不同的,特别是大于10000000的有符号數。若想确切知道單片機中的二進制數所對應的十進制數是多少,先要了解該二進制數是有符号數還是無符号數,再換算出該二進制數對應的十進制數。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!