1樓:做而論道
其實,補碼,它就是一個「代表負數」的正數。
使用了補碼之後,計算機中,就沒有負數了。
而且,也就沒有減法運算了。
那麼,計算機中,只需配置一個加法器,就可以走遍天下了。
補碼(一個正數)怎麼就能代表負數呢?
你看 10 進位制: 28 - 1 = 27
28 + 99 = 一百) 27
只要你限制在2 位數,超過 2 位就捨棄!
那麼,+99 和-1,就是等效的。
同樣,+98 就能代表-2。
這些正數,就叫做「負數的補數」。
計算公式,你肯定能推出來: 補數 = 負數 + 10^2。
正數,已經就是正數了,必須直接參加運算,不許變化。
當然,也有人說,正數,其本身就是補碼。
計算機中,以 8 位 2 進位制,稱為一個位元組。
那麼有:-1 的補碼,就是:-1 + 2^8 = 255 =1111 1111 (二進位制)。
-2 的補碼
-128 的補碼:
有了這些,不就完事了嗎?
原碼反碼取反加一符號位不變。。。還弄這些幹嘛?
老外,數學不好,只能絞盡腦汁,弄出這些個騷操作!
從原碼反碼,開始學習補碼,就弄不明白【補碼的意義】。
而且,還會在-0、-128 這裡,走進死衚衕,找不到出路。
2樓:盍蕾閆興昌
正整數的原碼,反碼,補碼都是一樣的,這是人為規定的,不需要理解。
正正數的:原碼 +5[0101]
反碼 +5[0101]
補碼 +5[0101]
負整數的:原碼 -5[1101]
反碼 -5[1010]
補碼 -5[1011]
你的問題,0001的補碼是多少,如果最高位0是符號位,補碼仍然是0001
如果在這個之前還有其他符號位如 0 0001或1 0001按照最高符號位判斷,最高符號位為0反補都不變,最高符號位為1,反碼取反,補碼加1
怎麼理解-128的原碼是 1000 0000 ,補碼也是1000 0000 。
3樓:做而論道
怎麼理解 128 的原碼是 1000 0000 ,補碼也是 1000 0000。
另外, -127 的原碼是 1111 1111 , 為什麼 -128 就成了 1000 0000
在碼長八位時,-128 並沒有原碼反碼,只有補碼:1000 0000。
求-128 的補碼,取反加一,是不好用的。
必須用「補碼的定義式」才能求出-128 的補碼。
定義式如下:
負數的補碼 = 2^n -|負數 | 256 + 對應的正數。
零和正數,不用變,直接參加計算。
4樓:匿名使用者
原碼(true form)是一種計算機中對數字的二進位制定點表示方法。原碼錶示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1(0有兩種表示:
0和-0),其餘位表示數值的大小。
當字長為8位時,(-128)沒有相對應的原碼和反碼, (128) =10000000)
128的機器碼原碼實際是:110000000,反碼101111111,補碼110000000,擷取低8位即10000000,表示的是一個負數。
是不是任意補碼為數值部分的值加上-128就是真值 如補碼10000001的真值為-
5樓:做而論道
八位二進位制**,範圍是 0~255,以補碼形式,可代表真值:-128~+127。
八位的補碼,在 0~127,即小於 128 時,直接代表零和正數。
該補碼,就是該數的真值。
八位的補碼,在 128~255,即大於 127 時,就代表負數 -128 ~ 1 了。
用這個補碼,加上-256,即可得出真值。
如補碼 1000 0001,即 129,加上-256,即可得出真值為-127。
如補碼 1000 0000,即 128,加上-256,即可得出真值為-128。
如補碼 1111 1111,即 255,加上-256,即可得出真值為-1。
如果是負數,求補碼,加上 256 即可。
如,真值是 -1,補碼就是 256 - 1 = 255,這就是 -1 的補碼。
做這些變換,根本不用二進位制,也不用《求反加一》這些麻煩事。
6樓:匿名使用者
10000001的真值不應該是287嗎。
整數的補碼怎麼表示
7樓:夏天的小紅花
補碼的最高位:0表示正數,1表示負數。
資料位:正數就是數值的二進位制數。
負數是取原數絕對值。
的二進位制數,每一位取反互換)後,末位加1。
8樓:金色潛鳥
正數的補碼就是正數的原碼,不變化。
負數的補碼,等於 不考慮符號位時 的數碼的反 碼 加 1。
例如 十進位制 -9, 一位元組原碼: 1000 1001; 最高位是符號位,符號位1是負數。
反碼:1111 0110, 加1得補碼 1111 0111。
9樓:做而論道
還能怎麼表示?
無論是整數,還是小數,或者是分數,無論你選用什麼**,都是用二進位制的 表示。
請問計算機的補碼總為什麼0有唯一的補碼,即[+0]=[-0]=00000000?[-0]不應該不是這樣嗎???
10樓:匿名使用者
貌似是因為計算機中沒有+0和-0的區別。拿8位機舉例:如果有正零和負零的區別的話計算機一位的長度只能表示-127~+127共255個數,但是如果把1000,0000即我們認為的-0判斷成+128就能多表示一個數。
為了功能更強大,所以設計人員讓計算機內部就不區別+0,-0所以也就不存在-0這個東東,所以0的補碼是唯一的也就是+0的補碼。
11樓:做而論道
難道還有+0 和-0 的補碼?
求原碼反碼補碼,都是針對【數值】進行的。
要知道,天下只有一個零。這可是小學生都知道的知識。
所以,數值,只有正數、負數、零。
根本就沒有正零負零。
但是,大佬卻在原碼反碼中都編了**。他們這是想「上天」哪!
零的原碼,有兩個**:
0]原碼 = 0000 0000、[-0]原碼 = 1000 0000。
反碼,不甘落後,也是有兩個**:
0]反碼 = 0000 0000、[-0]反碼 = 1111 1111。
在這兩種**中,都是重複定義了「零的編碼」,這就造成了混亂。
直接就導致了,這兩種**(原碼、反碼)無法使用。
而且,由於零多佔用了一組**,那麼,所能表示的數字,必然就少一個。
如八位的原碼反碼,都不能表示-128。
【因此,用「取反加一」來求 0 和-128 補碼,都是不可能的!】
在計算機系統中,數值,一律採用補碼來表示和儲存。
原碼反碼呢? 抱歉了,由於它們自身的混亂,它們都無法應用。
補碼的理論,**於數學的規律,並非是人為的胡編亂造。
所以,補碼中,就沒有違規的正負零。
零,在補碼中,只用唯一的一組**來表示,這就不會產生混亂。
那麼,0 和-128 的補碼,究竟都是怎麼求出來的?
補碼,有自己的定義式,與原碼反碼,並無任何關係。
當 x >=0: [x ]補碼 = x;
當 x < 0: [x ]補碼 = x + 2^n, n 是補碼的位數。
這定義式,是由數學理論推匯出來的,要比胡說八道的「取反加一」更準確嚴密。
按照定義式,0 和-128 的八位補碼,如下:
[ 0 ]補碼 = 0000 0000。
[-128]補碼 = 128 + 2^8 = 128 = 1000 0000 (二進位制)。
-128,如果用「取反加一」,可就難辦了。
因為,-128 並沒有原碼和反碼,拿什麼取反、拿什麼加一!
零的補碼,按照「取反加一」,也將是「負零的反碼+1」
那麼,[-0]補碼=0000 0000,符號,是正的嗎?
負零的符號位,竟然是 0 ! 這也是無法解釋的結果。
12樓:匿名使用者
計算機中減法器的成本是一個加法器的幾倍,所以計算機多采用加法,沒有減法,所以為結果正確,有了反碼《負數》、補碼《負數非的結果不一定正確》。但是零的原始碼和反碼都是它本身,貌似對零求補碼沒什麼必要。
對於正數,其原碼 反碼 補碼是相同的嗎
相同的,正數的原碼 反碼 補碼。引進補碼的作用是為了讓計算機更方便做減法。例如 按時間12個小時來算,現在的準確時間是4點,有一個表顯示的是7點,如果要校準時間,我們可以將時針退7 4 3格,也可以向前撥12 3 9格,計算機做減法就可以轉化成 3 9,這樣可以簡化計算機的硬體裝置去做複雜的減法。然...
什麼是微控制器的補碼,有什麼意義
計算機裡面,只有加法器,沒有減法器,減法,必須用加法來完成。對於 100 以內的十進位制數,減1 就可以用 加 99 代替。比如 25 1 24,可以寫成 25 99 1 24。限定了兩位數,1 和 99 是等效的。同樣,2,可以用 98 代替。它們之間,稱為 補數 100 稱為 模 對於 8 位二...
正數的補碼等於原碼是如何算出來的
這是規定。補碼是為負數想出來的辦法,目的是減法可以用加補碼的方法實現,補碼可用反碼加1得來,於是又有了負數的反碼。計算機裡有硬體 加法器 有了補碼,減法也可以用加法器做了,計算機裡運算速度硬體遠快於軟體,這就是反碼,補碼和原碼多樣化的原因。正數的原碼 反碼 補碼,這是規定的,不是算的。如果,問的是負...