⑴ 單片機求反碼時符號變不變
要看你定義的是無符號數還是有符號數了。如果定義的是無符號數,當然不會變,因為它總是正的;如果是有符號數,當然會變,因為最高位是符號位。
例:
unsigned char i=0x75;無符號數 求反碼後為0x8A
char i=0x75;有符號數+147, 求反碼後為-10
⑵ 單片機原理及應用中的十進制數與二進制數原碼、反碼、補碼詳細解答
首先得說明的一點,原碼、反碼、補碼都是有符號定點數的表示方法。是吧,沒有符號而言就不會出現+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位原碼能表示的數多一個
原碼,反碼,補碼 都是指二進制的形式,所以十進制的對應碼為二進制數,注意負數的符號位,二進制數的碼制轉換就按照我上面說的啦,看仔細,多想一想,撿幾個數做做練習一下,你就會啦,關鍵是練習。
其實就是這樣的,單片機中的也就是計算機中的碼制轉換,單片機也叫微機嘛,即微型計算機,呵呵
⑶ C語言中,原碼,補碼和反碼怎麼換算
換算方法如下:
1、數在計算機中是以二進制形式表示的。
2、數分為有符號數和無符號數,原碼、反碼、補碼都是有符號定點數的表示方法。
3、一個有符號定點數的最高位為符號位,0是正,1是副;【原碼】就是這個數本身的二進制形式。
4、正數的【反碼】和補碼都是和原碼相同;負數的【反碼】是將其原碼除符號位之外的個位求反。
1、C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
2、盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
⑷ 單片機 數-12H的反碼為
12H代表16進制數12,轉化為二進制為:00010010
求反碼為:11101101
再轉換回16進制的話,1110對應E,1101對應D
所以是EDH
⑸ 單片機 +1000110B的反碼是什麼
對於一個正整數,他的原碼、反碼和補碼是完全相同的。所以+1000110B,他的反碼是
01000110B
⑹ 關於單片機的原碼,反碼,補碼 之 匯編程序的問題
這程序是錯誤的。
1. 它用的數據,並不是補碼,而是原碼。
因此計算起來,需要變換稱為補碼,相當的麻煩。
2. 原碼變換成補碼,先要判斷正負。
負數的原碼,才需要變換,正數不用變。
而這個程序並沒有判斷,都進行了變換,這是錯誤的。
3. 負數原碼變換到補碼,是數值部分取反加一。
而這個程序,是全部都取反了。
4. 程序中的標號,使用錯誤。
不應該用 ADD、SUB 這樣的保留字。
5. 調用了多次子程序,都沒有「返回 (RET)」。
這程序,早就跑飛了。
建議作者重新編程。
⑺ 單片機74LS138是反碼輸出嗎
74LS138是3-8解碼器,有效位為高。
74LS139是反碼輸出的3-8解碼器。
⑻ 在單片機中,什麼是補碼最好能給出定義和例子,謝謝
補碼,是正負數存入計算機時的一種形式。
利用補碼,就可把減法,轉換成加法。
利用補碼,目的是減小硬體的復雜性。
補碼,並不難理解,只是被計算機磚家搞亂了概念。
其實,小學生,都知道下面這些常識:
鍾表,倒撥 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,舍棄即可。
⑼ pic單片機怎麼用戶匯編語言實現位取反
用COMF指令。
例如對於一個自定義的變數TEMP
PIC10、PIC12、PIC16系列單片機用 COMF TEMP,1
PIC18系列單片機用 COMF TEMP,1,0
PIC24、dsPIC系列單片機用 COM TEMP (注意這兩個系列的單片機用的匯編的不是COMF,而是COM)
另外PIC32系列單片機沒用過其匯編,所以沒法說是怎麼寫。
⑽ 單片機的CPL指令,CPL指令對於負數的求反與正數的求反相同嗎
單片機的指令不管是正數還是負數,只對操作數取反。所以如果A=00100100B
與A=10010110B使用以上指令結果是不一樣的。