1. 單片機。反碼與補碼
反碼-----按位取反-------01111111
補碼-----負數的反碼+1---1000000
注意一共有8位
2. 單片機原理及應用中的十進制數與二進制數原碼、反碼、補碼詳細解答
首先得說明的一點,原碼、反碼、補碼都是有符號定點數的表示方法。是吧,沒有符號而言就不會出現+0與-0了呀,呵呵。
原碼就是這個數本身的二進制形式。
例如:0000001 就是+1 1000001 就是-1
首先要說明的是:正數的反碼和補碼都是和原碼相同的;
還是再重申一下吧
〔1〕原碼:這個數本身的二進制形式。 例如十進制的8的原瑪就是01000,就是用二進製表示〔2〕反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。
〔3〕補碼:負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。
正數沒什麼好講的,就說說負數吧:負數的原碼,依舊是一個數本身的二進制形式,也就是說十進制的-8的原碼就是11000[注意,第一位1是符號'-'哦];反碼呢,將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。取反操作指:原為1,變為0;原為0,變為1。(1變0; 0變1),這個簡單理解吧。實際上,這樣說不夠准確,因為我們還要除掉符號位再這樣取反。
看好了-8的原碼:11000----->-8的反碼就是原碼除了符號位之後的其他位都按位取反10111
符號位
-8原碼 1 1 0 0 0
-8反碼 1 0 1 1 1
現在懂什麼是原碼和反碼了吧,我已經盡力了,呵呵。好啦,該補碼登場啦。
補碼,簡單地說就是反碼末位〔最後一位〕+1
為什麼要設立補碼呢?
第一是為了能讓計算機執行減法:
[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)
[10000000]補
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
我不知道朋友您看了上面的是否真的懂了,或許還不知道什麼叫做」溢出」吧
所謂的溢出就是當我們要表示的數位不夠表示了
我們的二進制的位數一般有個具體的范圍:
例如一個位元組就是8位,超過8位當然就溢出了
以8位為例子,看好啦
符號位
0 1 1 1 1 1 1 1 1
+ 0 1
------------------------------------
0 [1]0 0 0 0 0 0 0 0
[1]表示就是進位沒地方放了,怎麼說呢,好象在十進制中,我有99個盒子已經裝了99對鞋子,當第 100雙鞋子沒地方放了一樣,超出了盒子個數,這樣就產生了所謂的溢出了
好,我們再回到上面反碼的例子,(別忘記我們是在介紹反碼了)
符號位
[ 1 0 0 0 0 0 0 0]補
=〔 1 0 0 0 0 0 0 0]反+1
= 1 1 1 1 1 1 1 1 ------看到反碼的取反操作在其中哦,0都變成1
+ 1
----------------------------------
= 1 (1) 0 0 0 0 0 0 0
= 0 0 0 0 0 0 0 0(最高位溢出了,符號位變成了0)
看到符號位也參與了計算一樣1+1就變成了0,至於進位的1就丟失了
從而變成了全0
現在我們再來看看,原碼 +0 的補碼就是:0000 0000〔原因是補碼和原瑪是一樣的〕
原瑪 -0 的補碼就是:0000 0000
是不是一樣了,這樣就消除了二異性了,不要說有-0與+0之分了
不知道朋友您是否還會覺得有什麼不妥呢????
也許你會問
10000000這個補碼表示的哪個數的補碼呢?
其實這是一個規定,這個數表示的是-128
所以n位補碼能表示的范圍是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數多一個
原碼,反碼,補碼 都是指二進制的形式,所以十進制的對應碼為二進制數,注意負數的符號位,二進制數的碼制轉換就按照我上面說的啦,看仔細,多想一想,撿幾個數做做練習一下,你就會啦,關鍵是練習。
其實就是這樣的,單片機中的也就是計算機中的碼制轉換,單片機也叫微機嘛,即微型計算機,呵呵
3. 單片機補碼
你的三位二進制什麼意思我沒懂, 補碼的意思: 比如一個二進制數 1100 十進製表示就是12,要求1100的補碼,補碼 = 反碼 +1 ,1100的反碼就是 0011,補碼 0011+1=0100
4. 為什麼51單片機定時器賦初值十六進制數要用補碼
因為
51單片機
定時器計數是加法計數(向上),到65536時溢出
初值=65536-計數脈沖個數
可見初值就
是計數脈沖個數的
補碼
5. 什麼是單片機的補碼,有什麼意義
你的問題有個小錯誤,呵呵,補碼是一種計數方式,不分單片機哦。 使用補碼,可以將符號位和其它位統一處理;同時,減法也可按加 法來處理。另外,兩個用補碼表示的數相加時,如果最高位(符號位) 有進位,則進位被舍棄。 補碼與原碼的轉換過程幾乎是相同的。 數值的補碼表示也分兩種情況: (1)正數的補碼:與原碼相同。 例如,+9的補碼是00001001。 (2)負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1。 例如,-7的補碼:因為是負數,則符號位為「1」,整個為10000111;其餘7位為-7的絕對值+7的原碼 0000111按位取反為1111000;再加1,所以-7的補碼是11111001。
6. 在單片機中,什麼是補碼最好能給出定義和例子,謝謝
補碼,是正負數存入計算機時的一種形式。
利用補碼,就可把減法,轉換成加法。
利用補碼,目的是減小硬體的復雜性。
補碼,並不難理解,只是被計算機磚家搞亂了概念。
其實,小學生,都知道下面這些常識:
鍾表,倒撥 1 小時,可以用正撥 11 小時來代替。
倒撥 20 分,可以用正撥 40 分來代替。
-π/2 處的三角函數,與+3π/4 處的函數值相同。
在兩位十進制數的條件下,減一,可以用+99 代替。
如:24-1=2324+99=(1) 23。
在上面所說的,就是「補數」的概念。
為了求補數,還要知道一個「周期」,也可稱為「模」。
-------
在計算機中,沒有數字,都是二進制代碼。
補數,也就改稱為「補碼」了。
八位二進制是一個位元組。范圍是:0000 0000~1111 1111。
寫成十進制,就是 0~255,周期,就是 256。
-1,其補碼就是 256-1=255=1111 1111。
-2,其補碼就是 256-2=254=1111 1110。
-3,其補碼就是 256-3=253=1111 1101。
... ...
-128,其補碼就是 256-128=128=1000 0000。
-------
補碼的定義式:
正數的補碼 = 該數字本身。
負數的補碼 = 模+這個負數。
-------
補碼的應用:
6-2=4,用補碼計算如下:
0000 0110
+1111 1110
----------
(1) 0000 0100
進位的 1,舍棄即可。
7. 關於單片機的原碼,反碼,補碼 之 匯編程序的問題
這程序是錯誤的。
1. 它用的數據,並不是補碼,而是原碼。
因此計算起來,需要變換稱為補碼,相當的麻煩。
2. 原碼變換成補碼,先要判斷正負。
負數的原碼,才需要變換,正數不用變。
而這個程序並沒有判斷,都進行了變換,這是錯誤的。
3. 負數原碼變換到補碼,是數值部分取反加一。
而這個程序,是全部都取反了。
4. 程序中的標號,使用錯誤。
不應該用 ADD、SUB 這樣的保留字。
5. 調用了多次子程序,都沒有「返回 (RET)」。
這程序,早就跑飛了。
建議作者重新編程。
8. 單片機的補碼有什麼意義
數的原碼表示形式簡單,適用於乘除運算,但用原碼表示的數進行加減法運算比較復雜,引入補碼之後,減法運算可以用加法來實現,且數的符號位也可以當作數值一樣參與運算,因此在計算機中大都採用補碼來進行加減法運算