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表示負,中間值表示數字的絕對值。