導航:首頁 > 源碼編譯 > 23的源碼反碼補碼

23的源碼反碼補碼

發布時間:2022-10-07 10:49:22

1. 單片機原理及應用中的十進制數與二進制數原碼、反碼、補碼詳細解答

首先得說明的一點,原碼、反碼、補碼都是有符號定點數的表示方法。是吧,沒有符號而言就不會出現+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位原碼能表示的數多一個

原碼,反碼,補碼 都是指二進制的形式,所以十進制的對應碼為二進制數,注意負數的符號位,二進制數的碼制轉換就按照我上面說的啦,看仔細,多想一想,撿幾個數做做練習一下,你就會啦,關鍵是練習。

其實就是這樣的,單片機中的也就是計算機中的碼制轉換,單片機也叫微機嘛,即微型計算機,呵呵

2. 十進制數負23的原碼,反碼,補碼表示形式

原碼:10010111 反碼:11101000 補碼:11101001 正數原碼反碼補碼一樣,負數反碼為原碼除符號位其餘按位取反,補碼為反碼加一

3. 寫出23.3的二進制數的原碼表示,反碼表示,補碼表示

23.3的二進制原碼反碼補碼分別是什麼呢?

正數原碼反碼補碼相同把23.3轉化為二進制
23:10111除二取余逆序排序
0.3:01001保留六位有效數字,乘而取整,正序排列
23.3:1011101001

擴展內容:

bit(位):數據存儲的最小單元。在計算機二進制系統中,位,簡記為b,也稱為比特(bit),每個二進制數字0或1就是一個位(bit),其中每 8bit = 1 byte(位元組);

二進制

二進制在計算機技術中廣泛應用。二進制數用0和1兩個數字及其組合來表示任何數,二進制的進位規則是:「逢2進1」。數字1在不同的位上代表不同的值,按從右至左

的次序,這個值以2倍遞增。

無符號數和有符號數

在計算器中參與運算的數有兩大類:無符號數和有符號數

(1)有符號數:

對於有符號數而言,符號的正、負機器是無法識別的,但由於「正、負」恰好是兩種截然不同的狀態,如果用「0」表示「正」,用「1」表示「符」,這樣符號也被數字化了,

並且規定將它放在有效數字的前面,即組成了有符號數。所以,在二進制中使用最高位(第一位)來表示符號,最高位是0,表示正數;最高位是1,表示負數。

(2)無符號數:

無符號數是針對二進制來講的,無符號數的表數范圍是非負數。全部二進制均代表數值(所有位都用於表示數的大小),沒有符號位。即第一個"0"或"1"不表示

正負。

例子:

(1)在Java中int數據類型是怎麼在計算機中表示的呢?

在二進制系統中是以bit(位)來作為數據存儲單元的(詳細內容請看前言),假設 int number = 1 ,那麼number在計算機系統中將表示如下:

00000000 00000000 00000000 00000001

同理可得,number=-1 時,在二進制中表示如下:

10000000 00000000 00000000 00000001

注意:最高位(第一位)是符號位,因為是number值為1是一個正數,所以最高位為0;

(2)二進制轉十進制?

要從右到左用二進制的每個數去乘以2的相應次方(次方要從0開始算起);

假如:二進制數1101轉化成十進制 ,那麼 1101 = 1*20+0*21+1*22+1*23 = 1+0+4+8 = 13;

注意:任何數的0次方都是1。

二進制中的原碼、反碼、補碼

對於有符號數而言:

(1)二進制的最高位是符號位:0表示正數,1表示負數

(2)正數的原碼、反碼、補碼都一樣;

(3)負數的反碼 = 它的原碼符號位不變,其他位取反(0 ->1 ; 1->0 );

(4)負數的補碼 = 它的反碼 +1;

(5)0的反碼、補碼都是0;

(6)在計算機運算的時候,都是以補碼的方式來運算的;

例子:

下面我們就使用「有符號數」來模擬一下,在計算機中是怎樣運算的。

(1)正數相加:

例如:1+1 ,在計算機中運算如下:

1的原碼為:

00000000 00000000 00000000 00000001

因為「正數的原碼、反碼、補碼都一樣」,所以,1的補碼 = 1的原碼,所以 1的補碼+ 1的補碼 就等於:

00000000 00000000 00000000 00000001

+

00000000 00000000 00000000 00000001

=

00000000 00000000 00000000 00000010

00000000 00000000 00000000 00000010( 轉換為10進制) = 0*2^0 + 1*2^1 = 0 + 2 =2

(2)正數相減:

例如:1-2,在計算機中運算如下:

在計算機中減運算其實是作為加運算來操作的,所以,1-2 = 1 + ( -2 )

第一步:把 1補碼找出來(因為正數的原碼、反碼、補碼都一樣,所以我們可通過原碼直接獲取補碼):

1的補碼:

00000000 00000000 00000000 00000001

第二步:把-2的原碼找出來:

-2的原碼:

10000000 00000000 00000000 00000010

第三步:把-2的反碼找出來:

-2的反碼:

11111111 11111111 11111111 11111101

第三步:把-2的補碼找出來:

-2的補碼:

11111111 11111111 11111111 11111110

第四步:1的補碼與-2的補碼相加:

00000000 00000000 00000000 00000001

+

11111111 11111111 11111111 11111110

=

11111111 11111111 11111111 11111111

第五步:將計算結果的補碼轉換為原碼,反其道而行之即可(如果想將二進制轉換為十進制,必須得到二進制的原碼)

補碼:11111111 11111111 11111111 11111111

=

反碼:11111111 11111111 11111111 11111110

=

原碼:10000000 00000000 00000000 00000001

第六步:將計算結果的二進制原碼 轉換 為十進制

二進制原碼:10000000 00000000 00000000 00000001 = 1*2^0 = -1

4. 假定某台計算機的機器數佔8位, 請寫出十進制數-23的原碼、反碼和補碼

因為數據在計算機中都是以二進製表示的,編譯系統對於不同類型的變數分配不同大小的存貯空間,制定不同的取值范圍。比如整型在計算機中的存儲用2個位元組16位的存儲空間,其中的最高位代表符號位的,符號位為0表示的是正數,符號位為1表示為負數,整型數據在內存中以二進制的補碼存放。
以10和-10說明正數在內存中的存放形式:
例如:十進制
10
-10
二進制原碼
0000000000001010
1000000000001010
二進制反碼
0000000000001010
1111111111110101
二進制補碼
0000000000001010
1111111111110110
所以:-23在計算機的機器數佔8位的
二進制原碼為10010111
二進制反碼為11101000
二進制補碼為11101001

5. -23原碼、反碼和補碼

-23源碼10010111
-23反碼11101000
-23補碼11101001

6. 十進制數負23的原碼,反碼,補碼表示形式

原碼:10010111
反碼:11101000
補碼:11101001
正數原碼反碼補碼一樣,負數反碼為原碼除符號位其餘按位取反,補碼為反碼加一

7. +23和-23的原,反,補碼

一、正整數的原碼、反碼、補碼完全一樣,即符號位固定為0,數值位相同
二、負整數的符號位固定為1,由原碼變為補碼時,規則如下:
1、原碼符號位1不變,整數的每一位二進制數位求反,得到反碼
2、反碼符號位1不變,反碼數值位最低位加1,得到補碼

閱讀全文

與23的源碼反碼補碼相關的資料

熱點內容
程序員用得到數字區嗎 瀏覽:174
python求商 瀏覽:478
ipad能用c語言編譯器嗎 瀏覽:565
軟泥解壓球最新版 瀏覽:999
4萬程序員辭職創業 瀏覽:760
thinkingphp 瀏覽:597
安卓相冊移動文件夾 瀏覽:7
耳朵清潔解壓聲控99的人都睡得著 瀏覽:206
叉車出租網站源碼 瀏覽:874
共享單車的app是什麼 瀏覽:409
不帶gui的伺服器什麼意思 瀏覽:374
金剛經及PDF 瀏覽:102
php中冒號 瀏覽:359
php5432 瀏覽:353
命令在哪使用 瀏覽:172
php獲取網頁元素 瀏覽:709
為什麼需要硬體驅動編譯 瀏覽:886
pm編程怎樣看導柱孔對不對稱 瀏覽:139
農業大學選課找不到伺服器怎麼辦 瀏覽:661
路由配置網關命令 瀏覽:935