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

源碼補碼反碼

發布時間:2022-02-21 12:41:58

1. 原碼反碼和補碼

有一個小孩,很小很小的,他只認識100個數,也不會做減法。

那麼,減一,你就可以告訴他,用加99代替:


比如:

36-1=35

36+99=(1)35


忽略進位100,結果不是一樣的嗎?

那麼:

99,就是-1的補數。

98,就是-2的補數。

。。。

利用補數,就可以把減法,轉換為加法運算。

--------------------

在計算機中,數據,都是以二進制存儲的,稱為:代碼。

八位二進制的范圍是:00000000~11111111。

用十進製表示,就是:0~255,共有256組代碼。

正數,直接參加運算即可,用不著求補碼。

那麼,負數呢?

-1的補碼,就是255(11111111);

-2的補碼,就是254(11111110);

。。。

-128的補碼,就是128(10000000);

這些負數,與補碼之間的關系式,小學生都可以推算出來。

根本就不用扯到「原碼和反碼」。

在計算機中,根本就沒有原碼和反碼。

2. 原碼反碼補碼

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

3. 計算機原碼反碼補碼怎麼算

計算機原碼反碼補碼計算方法:

1、原碼

原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值。比如如果是8位二進制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符號位. 因為第一位是符號位, 所以8位二進制數的取值范圍就是:[1111 1111 , 0111 1111]

即[-127 , 127]

原碼是人腦最容易理解和計算的表示方式。

2、反碼

反碼的表示方法是:正數的反碼是其本身。負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反。

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可見如果一個反碼表示的是負數,人腦無法直觀地看出來它的數值。通常要將其轉換成原碼再計算。

3、補碼

補碼的表示方法是:正數的補碼就是其本身。負數的補碼是在其原碼的基礎上,符號位不變,其餘各位取反,最後+1。(即在反碼的基礎上+1)。

[+1] = [00000001]原 = [00000001]反 = [00000001]補

[-1] = [10000001]原 = [11111110]反 = [11111111]補

對於負數,補碼表示方式也是人腦無法直觀看出其數值的。通常也需要轉換成原碼在計算其數值。

(3)源碼補碼反碼擴展閱讀:

原碼,反碼和補碼是完全不同的。既然原碼才是被人腦直接識別並用於計算表示方式,為何還會有反碼和補碼呢?

首先,因為人腦可以知道第一位是符號位,在計算的時候我們會根據符號位,選擇對真值區域的加減。但是對於計算機,加減乘數已經是最基礎的運算,要設計的盡量簡單。計算機辨別"符號位"顯然會讓計算機的基礎電路設計變得十分復雜。於是人們想出了將符號位也參與運算的方法。我們知道,根據運演算法則減去一個正數等於加上一個負數,即: 1-1 = 1 + (-1) = 0 , 所以機器可以只有加法而沒有減法,這樣計算機運算的設計就更簡單了。

於是人們開始探索將符號位參與運算,並且只保留加法的方法。

4. 什麼是原碼 補碼 反碼

計算機中,沒有原碼反碼。

計算機中,只有補碼,用於表示正負數。

以八位碼長,來說明:

數字 0 的補碼是:0000 0000。

數字 1 的補碼是:0000 0001。

數字 2 的補碼是:0000 0010。

。。。依次遞增。。。

數字 127 的補碼,就是:0111 1111。

負數,你就依次遞減吧。

數字 0 的補碼是:0000 0000。

數字 -1 的補碼是:1111 1111。(=255)

數字 -2 的補碼是:1111 1110。(=254)

。。。依次遞減。。。

數字 -128 的補碼,就是:1000 0000。(=128)

---------------

由此可推出補碼的定義:

零和正數的補碼,就是該數字本身。

負數的補碼,就是:256 + 該負數。

---------------

這就是:計算機中,正負數的存放格式。

其他說法如:原碼反碼符號位,都是人為瞎編的。

它們和計算機,沒有任何關系。

5. 原碼 反碼 補碼

說到二進制補碼,大家都知道:有符號數的負數的補碼是 其正數的反碼+1,例如 10001111 的補碼是反碼01110000 加 1 =01110001 ,很多書都這么說,可是為什麼這樣計算的結果就是它的補碼?為什麼要用補碼?很多書要麼不解釋,要麼就是說:這是因為在計算機內補碼計算最快。(其實是補碼計算指令的CPU設計更容易實現) 最初我看的書,《大學計算機基礎教程》(我非計算機專業),這破書說不清,道不明,給與我非常嚴重負面的影響,以至於我在以後的計算機學習過程中,程序設計中遇到大大小小不少麻煩和迷茫。

在某些計算機組成原理書上提到:其實補碼的計算原理,是用一個模來減去無符號的正數部分。譬如時鍾,12點之後是13點,但是時鍾上沒有13點怎麼辦?就用13減去12=1點。這個模是12.可惜這個比喻並不是很好。

請看 一個位元組長的無符號數的表示範圍 :0~255,有符號數的表示範圍:-128~127 , 注意,這個表示範圍的寫法極有可能影響我們的思維,從而導致錯誤。我們應該這樣來寫:0~127 ~ -128 ~ -1 ,這才是較好的寫法。為什麼?因為這個寫法的數的順序與0~255 一一對應。

由上,我們了解,其實補碼不過是用128 ~ 255 這段范圍的數來表示 ~128 ~ -1這段范圍的負數。那麼我們就可以憑自己,而不是看教材,就可以推測出計算補碼的公式,就是:256-欲求的負數的絕對值= 此負數的補碼。

沒錯,就是這么簡單的東西,可是卻困擾了很多人。可見有個好的教材是多麼的重要。

至於前面 「負數的補碼是 其正數的反碼+1」 , 極為垃圾的教材才會把這個計算方法作為初始方法來教。因為這個計算方法屏蔽了補碼的計算原理。其實這不過是 「256 - 欲求的負數的絕對值 = 此負數的補碼」的一個比較取巧的計算方法而已。請看 256=1 0000 0000 =1111 1111+1,而 1111 1111減任何二進制數的結果就是把這個數取反,那麼 256 - 某二進制數A 既是:將 A取反 +1

以上:完畢!

註:所有討論均在位元組長范圍內(8bit) 進行

6. 一個數的原碼,反碼,補碼

一個正負數據,在計算機中,是用補碼來代表的。

在計算機中,並不存在原碼和反碼。

利用補碼,就可以用加法,代替減法運算,從而簡化計算機硬體。

------

理解補碼,要先從補數開始。

時針轉一圈,周期是 12 小時。

倒撥 3 小時,就可以用正撥 9 小時代替。

9 就是-3 的補數。9 = 12-3。

同理,分針倒撥 X 分,就可以用正撥「60-X」代替。

60 是分針的周期。

------

對於兩位十進制 0~99,周期就是一百。

這時,減一,你就可以用 +99 代替。

25 - 1 = 24

25 + 99 = (1) 24

結果取兩位,舍棄進位。這兩種演算法,功能就是相同的。

99,就稱為-1 的補數。

98,就是-2 的補數。

。。。

利用補數,就可以用加法,代替減法運算。

補數怎麼求?

正數,不需要求補數。

負數的補數 = 周期 + 該負數。

------

計算機使用二進制,補數,就改稱:補碼。

八位二進制,共有 256 個數字。周期就是 256。

負數的補碼 = 256+該負數。

16位二進制,共有 2^16 個數字。負數的補碼 = 65536+ 該負數。

在八位時:

-1 的補碼是:256-1 = 255 = 1111 1111(二進制)。

-2 的補碼是:254 = 1111 1110。

-3 的補碼是:253 = 1111 1101。

。。。

-128 補碼:128 = 1000 0000。

求取公式:負數的補碼=周期+該負數。

正數,可以直接去運算,補碼,就是它本身了。

------

利用補碼,計算機僅需要一個加法器。

而原碼和反碼,不具備這種能力。

所以,在計算機中,並沒有原碼和反碼。

原碼和反碼,究竟是多少,就不必關心了。

7. 原碼,補碼,反碼都是什麼意思,怎麼算啊

把十進制數轉換成二進制數後,二進制數就是原碼
例如:十進制:2 -----> 二進制:10
「二進制:10「就是原碼
為了湊夠8位,在二進制10前面加6個0,變成00000010
2的原碼:00000010
2的反碼:00000010
2的補碼:00000010
也就是,正數的原碼,反碼,補碼都相同
下面是負數的原碼、反碼、和補碼:
3的原碼:00000011 -3的原碼:10000011 也就是最左邊的那個數表示正負,0代表正,1代表負,它也叫符號位
-3的原碼:10000011
-3的反碼:11111100 負數的反碼是對其原碼按位取反,符號位不變
-3的補碼:11111101 負數的補碼是在其反碼的末位加1
計算機用補碼計算

8. 原碼 反碼 補碼怎麼轉換

反碼補碼原碼怎麼轉換,來看看方法吧。

1、首先原始代碼的最高位是符號位,0表示正,1表示負,中間值表示數字的絕對值。

閱讀全文

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

熱點內容
安卓手機系統怎麼終止系統更新 瀏覽:701
程序員需要注重養生嗎 瀏覽:402
php框架網頁 瀏覽:914
sed腳本執行系統命令 瀏覽:911
linux選中命令 瀏覽:138
outlook發件加密 瀏覽:259
h3c歷史命令 瀏覽:507
曙光伺服器怎麼創建用戶 瀏覽:721
命令文案例 瀏覽:798
識別什麼花app 瀏覽:820
線上app是什麼意思 瀏覽:45
單片機屏蔽部分埠 瀏覽:329
蘋果版app是什麼 瀏覽:745
雲伺服器能更換地址 瀏覽:76
linux預讀演算法 瀏覽:558
視頻用什麼app編輯 瀏覽:70
編譯原理清華實驗 瀏覽:978
閑蛋app人氣怎麼樣 瀏覽:275
javacatch用法 瀏覽:861
京峰教育python 瀏覽:986