單片機機器數及編碼
機器數及其編碼
1、機器數與真值
機器只認識二進(jìn)制數:0、1。
這是因為,電路狀態(tài)常有兩個(gè),如通、斷;高電平、低電平;…可用0、1表示。
這種0、1、0、1…1在機器中的表現形式——機器數。一般為8位。
2、機器數的編碼及運算
對帶符號數而言,有原碼、反碼、補碼之分,計算機內一般使用補碼。
1)原碼
將數“數碼化”,原數前“+”用0表示,原數前“-”用1表示,數值部分為該數本身,這樣的機器數叫原碼。
設X——原數;則[X]原=X(X0)
[X]原=2n-1–X(X0),n為字長(cháng)的位數。
如,[+3]原=00000011B
[-3]原=27-(-3)=10000011B
0有兩種表示方法:00000000+0
10000000-0
原碼最大、最小的表示:+127、-128
2)反碼
規定正數的反碼等于原碼;負數的反碼是將原碼的數值位各位取反。
[X]反=X(X0)
[X]反=(2n–1)+X(X0)
如,[+4]反=[+4]原=00000100B
[-4]反=(28–1)+(-5)=11111111-00000101=11111010B
反碼范圍:-128~+127
兩個(gè)0;+0——00000000B
-0——11111111B
3)補碼
補碼的概念:現在是下午3點(diǎn),手表停在12點(diǎn),可正撥3點(diǎn),也可倒撥9點(diǎn)。即是說(shuō)-9的操作可用+3來(lái)實(shí)現,在12點(diǎn)里:3、-9互為補碼。
運用補碼可使減法 變成加法。
規定:正數的補碼等于原碼。
負數的補碼求法:1)反碼+1
公 式:[X]補=2n+X(X0)
如,設X=-0101110B,則[X]原=10101110B
則[X]補=[X]反+1=11010001+00000001=11010010B
如,[+6]補=[+6]原=00000110B
[-6]補=28+(-6)=10000000–00000110=11111010B
8位補碼的范圍–128~+127。
0的個(gè)數:只一個(gè),即00000000
而10000000B是-128的補碼。
原碼、反碼、補碼對照表:表1-2P10
4)補碼的運算
當X≥0時(shí),[X]補=[X]反=[X]原
[[X]補]補=[X]原
[X]補+[Y]補=[X+Y]補
[X-Y]補=[X+(-Y)]補
例:已知X=52Y=38求X-Y
計算機在做算術(shù)運算時(shí),必需檢查溢出,以防止發(fā)生錯誤
5)運算的溢出問(wèn)題
資 料字長(cháng)(位數)有一定限制,所以資料的表示應有一個(gè)范圍。
如字長(cháng)8位時(shí);補碼范圍-128~+127
若運算結果超出這個(gè)范圍,便溢出。
例:
錯:兩個(gè)負數相加和為正數。
可見(jiàn):結果正確 (無(wú)溢出)時(shí),Cs+1=Cs
結果錯誤(溢出)時(shí),Cs+1≠Cs
溢出判斷:溢出=Cs+1Cs(即結果是0為無(wú)溢出;1為有溢出)
十進(jìn)制數的編碼
對機器:二進(jìn)制數方便,
對人:二進(jìn)制數不直觀(guān),習慣于十進(jìn)制數。
在編程過(guò)程中,有 時(shí)需要采用十進(jìn)制運算,但機器不認識十進(jìn)制數。
怎么辦?
可以將十進(jìn)制的字符用二進(jìn)制數進(jìn)行編碼:
這叫做二進(jìn)制數對十進(jìn)制編碼——BCD碼。
上述每4位二進(jìn)制數表示一個(gè)十進(jìn)制字符,這4位中各位的權依次是:
8、4、2、1——8421BCD碼。
BCD碼的運算:
(1)BCD碼加法規則
兩個(gè)BCD數相加時(shí),“某位”的和小于10則保持不變;
兩個(gè)BCD數相加時(shí),“某位”的和大于9,則和數應加6修正。
(2)BCD碼減法規則
兩個(gè)BCD數相減時(shí),“某位”的差未發(fā)生借位,則差數保持不變;
兩個(gè)BCD數相減時(shí),“某位”發(fā)生了借位,其差應減6修正。
這里“某位”指BCD數中的“個(gè)位”、“十位”、“百位”、……
1、機器數與真值
機器只認識二進(jìn)制數:0、1。
這是因為,電路狀態(tài)常有兩個(gè),如通、斷;高電平、低電平;…可用0、1表示。
這種0、1、0、1…1在機器中的表現形式——機器數。一般為8位。
2、機器數的編碼及運算
對帶符號數而言,有原碼、反碼、補碼之分,計算機內一般使用補碼。
1)原碼
將數“數碼化”,原數前“+”用0表示,原數前“-”用1表示,數值部分為該數本身,這樣的機器數叫原碼。
設X——原數;則[X]原=X(X0)
[X]原=2n-1–X(X0),n為字長(cháng)的位數。
如,[+3]原=00000011B
[-3]原=27-(-3)=10000011B
0有兩種表示方法:00000000+0
10000000-0
原碼最大、最小的表示:+127、-128
2)反碼
規定正數的反碼等于原碼;負數的反碼是將原碼的數值位各位取反。
[X]反=X(X0)
[X]反=(2n–1)+X(X0)
如,[+4]反=[+4]原=00000100B
[-4]反=(28–1)+(-5)=11111111-00000101=11111010B
反碼范圍:-128~+127
兩個(gè)0;+0——00000000B
-0——11111111B
3)補碼
補碼的概念:現在是下午3點(diǎn),手表停在12點(diǎn),可正撥3點(diǎn),也可倒撥9點(diǎn)。即是說(shuō)-9的操作可用+3來(lái)實(shí)現,在12點(diǎn)里:3、-9互為補碼。
運用補碼可使減法 變成加法。
規定:正數的補碼等于原碼。
負數的補碼求法:1)反碼+1
公 式:[X]補=2n+X(X0)
如,設X=-0101110B,則[X]原=10101110B
則[X]補=[X]反+1=11010001+00000001=11010010B
如,[+6]補=[+6]原=00000110B
[-6]補=28+(-6)=10000000–00000110=11111010B
8位補碼的范圍–128~+127。
0的個(gè)數:只一個(gè),即00000000
而10000000B是-128的補碼。
原碼、反碼、補碼對照表:表1-2P10
4)補碼的運算
當X≥0時(shí),[X]補=[X]反=[X]原
[[X]補]補=[X]原
[X]補+[Y]補=[X+Y]補
[X-Y]補=[X+(-Y)]補
例:已知X=52Y=38求X-Y
計算機在做算術(shù)運算時(shí),必需檢查溢出,以防止發(fā)生錯誤
5)運算的溢出問(wèn)題
資 料字長(cháng)(位數)有一定限制,所以資料的表示應有一個(gè)范圍。
如字長(cháng)8位時(shí);補碼范圍-128~+127
若運算結果超出這個(gè)范圍,便溢出。
例:
錯:兩個(gè)負數相加和為正數。
可見(jiàn):結果正確 (無(wú)溢出)時(shí),Cs+1=Cs
結果錯誤(溢出)時(shí),Cs+1≠Cs
溢出判斷:溢出=Cs+1Cs(即結果是0為無(wú)溢出;1為有溢出)
十進(jìn)制數的編碼
對機器:二進(jìn)制數方便,
對人:二進(jìn)制數不直觀(guān),習慣于十進(jìn)制數。
在編程過(guò)程中,有 時(shí)需要采用十進(jìn)制運算,但機器不認識十進(jìn)制數。
怎么辦?
可以將十進(jìn)制的字符用二進(jìn)制數進(jìn)行編碼:
這叫做二進(jìn)制數對十進(jìn)制編碼——BCD碼。
上述每4位二進(jìn)制數表示一個(gè)十進(jìn)制字符,這4位中各位的權依次是:
8、4、2、1——8421BCD碼。
BCD碼的運算:
(1)BCD碼加法規則
兩個(gè)BCD數相加時(shí),“某位”的和小于10則保持不變;
兩個(gè)BCD數相加時(shí),“某位”的和大于9,則和數應加6修正。
(2)BCD碼減法規則
兩個(gè)BCD數相減時(shí),“某位”的差未發(fā)生借位,則差數保持不變;
兩個(gè)BCD數相減時(shí),“某位”發(fā)生了借位,其差應減6修正。
這里“某位”指BCD數中的“個(gè)位”、“十位”、“百位”、……
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
評論