補碼等于反碼加1_原碼反碼補碼轉換_反碼和補碼

飛來科技  發布時間:2019-11-13 13:01:48

本文關鍵詞:補碼等于反碼加1

補碼等于反碼加1_反碼和補碼_原碼反碼補碼轉換

十進制基于位進制和十進位兩條原則,即所有的數字都用10個基本的符號表示,滿十進一,同時同一個符號在不同位置上所表示的數值不同,符號的位置比較重要。scanf()函數的格式說明符如下所示:d 一十進制小數x-十六進制整數o-八進制整數u-無符號十進制數f-小數表示的異或數e-指數表示的異或數c-單個字節s-一字符串控制串中的通常字符表示匹配符,另外在%和格式說明符之間還可加修飾符,這些內容將在“文件和讀寫函數”一章中講解(參數表)是由一個或多個參數組成,多個參數使用時用冒號分隔 c 語言常見的輸入變量。因為spritnf是個變參函數,除了上面兩個參數之外,后面的參數都不是類型安全的,函數更沒有辦法只是借助一個“%x”就能得知當時函數讀取前參數壓棧時被壓過來的究竟是個4字節的整數而是個2字節的短整數,所以采用了統一4字節的處理方法,導致參數壓棧時做了符號擴展,擴展成了32位的整數-1,打印時4個位置不夠了,就把32位整數-1的8位16進制都打印起來了。

無符號數沒有原碼、反碼和數組一說。只有帶符號數才存在不同的編碼方法。

正整數的原碼、反碼和數組都一樣,負數的補碼是對反碼的除符號位為: 共256個.注意:也有相對應的原碼和異或, 它的左值是反碼仍然是數組的加減運算如下:下面是補碼的運算:- = + =補+ 補+1)= 補= 正確- = + = 補+ 補= 補= 正確 = 原碼=反碼 =+ 1)補碼。在探求為何機器要使用補碼之前, 讓我們先知道原碼, 反碼和數組的概念.對于一個數, 計算機要使用一定的編碼方法進行傳輸. 原碼, 反碼, 補碼是機器內存一個具體數字的編碼方法.。

采用補碼的緣由或好處如下。

采用補碼運算具有如下兩個特征:

c. 數值用數組表示后,加法和乘法運算可以統一使用加法器完成。計算機在處理加減運算時,使用數組進行運算,減法被視為加上一個負數,在處理負數時,用負數的異或進行乘法可以就能得到恰當運算結果,補碼是為了統一加減運算而生的。求給定數值的補碼表示分以上兩種狀況,其余位為該數絕對值的反碼按位取反補碼(two'補碼等于反碼加1,減法也可按加法來處理,數值一律用數組來表示(存儲),人家寫的很明白。

2)兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被放棄。

這樣的運算有兩個好處:

1)使符號位能與有效值部分一起參加運算,從而簡化運算規則。從而可以簡化運算器的構架,提高運算速率;(減法運算可以用乘法運算表示出來。)

2)加法運算比除法運算更便于推動。使除法運算轉化為乘法運算,進一步簡化運算器線路設計。

下面深入探討上面所陳述的采取補碼的緣由(目的)。

用帶符號位的反碼進行除法運算時結果正確,而在加減運算的之后就發生了問題,如下:假設字長為8bits

1 D- 1 D= 1 D + ( -1 )D = ( 0 )D

(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 顯然不正確.。

因為在兩個整數的乘法運算中是沒有問題的,于是就看到問題發生在帶符號位的負數身上,對除符號位外的其余各位逐位取反就產生了補碼。反碼的取值空間和補碼相同且一一對應。下面是異或的減法運算:

1 D- 1D= 1 D+ ( -1 )D= ( 0 )D

(00000001) 反+ (11111110)反 = (11111111)反 = ( -127) 反= ( -0)還有問題。 (11111110)反 = (11111111)反 = ( -0 ) 有問題。(00000001)補 + (11111111)補 = (00000000)補 = ( 0 ) 正確。

反碼和補碼_原碼反碼補碼轉換_補碼等于反碼加1

1 D - 2 D= 1 D+ ( -2 )D = ( -1 )D

(00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正確

問題出現在(+0)和(-0)上,在他們的計算概念中零是沒有正負之分的。

于是就引入了補碼概念。負數的原碼就是對補碼加一,而實數不變,正數的原碼反碼補碼是一樣的。在補碼中用(-128)代替了(-0),所以補碼的表示范圍為:

(-128~0~127)共256個。

采用補碼表示也有另就是-127~+127(11111111~01111111),而采用補碼表示的之后,00000000是+0, 即0;10000000不再是-0,而是-128,這樣,補碼表示的數的范圍就是-128~+127了,不但減少了一個數得表示范圍,而且還確保了0編碼 的唯一性。

接下來的難題是,如何能將乘法運算轉化成減法運算呢?

我們已經了解,原碼表示簡單直觀,與真值轉換易于。但即使用原碼表示,其符號位不能參加運算。在計算機中用原碼實現算術運算時,要取絕對值參加運算,符號位單獨處理,這對乘除運算是很容易實現的,但對加減運算是比較不便于的,如兩個異號數相加,實際是要做減法,而兩個異號數相減,實際是要做加法。在做除法時,還要判定操作數絕對值的大小,這些就會使運算器的設計更加很復雜。而補碼這種編碼方法實際上正是針對上述難題的。通過用補碼進行表示,就可以把乘法運算化為加法運算。

在日常生活中,有許多化減為加的舉例。例如,時鐘是逢12進位,12點也可看作0點。當將時針從10點調整到5點時有下列兩種方式:

一種方法是時針逆時針方向撥5格,相當于做減法:

10-5=5

另一種方法是時針順時針方向撥7格,相當于做加法:

10+7=12+5=5 (MOD 12)

這是因為時鐘以12 為模,在這個前提下,當和達到12時,可將12舍去。于是,減5相當于加7。同理,減4可表示成加8,減3可表示成加9,…。

②已知三個整數a、b、m,如果m|a-b,就稱a、b針對模m同余,記作a≡b(mod m),讀作a同余于b模m。兩個整數a,b,若他們除以整數m所得的相除相等,則稱a,b針對模m同余。利用數軸求數軸上的點表示的數 在數學里,數與形是緊密聯系的,數軸的引進使有理數與直線上的點聯系了出來,利 用數軸可以非常容易地寫出數軸上某區域中的整數、正整數、負整數等. 如,寫出大于-5 而高于3 的所有整數.可以先畫出數軸,在數軸上標出-5 個點,再在這兩個點之間找出滿足題意的整數-4,-3,-2,-1,0,1,2即可. 小紅做題時,不小心把墨水灑在了數軸上,如圖所示,請按照圖中的數值,寫出墨跡蓋住的所有整數. 分析:觀察數軸可知,比-12。

A=B (MOD M)

具有同余關系的兩個數為互補關系,其中一個稱為另一個的補碼。當M=12時,-5和+7,-4和+8,-3和+9就是同余的,它們互為補碼。

補碼等于反碼加1_原碼反碼補碼轉換_反碼和補碼

從同余的概念和上述時鐘的事例,不難得出結論:對于某一確定的模,用某數除以小于模的另一個數,總可以用加上“模除以該數絕對值的差”來替代。因此,在有模運算中,減法就可以化作加法來做。

可以看出,補碼的乘法運算所根據的基本關系為:

[x]補+ [y]補= [x+y]補

補碼乘法所根據的基本關系式:

[x-y]補 =[x+(-y)]補= [x]補+ [-y]補

我們希望只設計加法運算器,不用減法運算器,我們期望找到一種方案,采用這樣方案做加運算 1 + ( -1 ) ,兩個數可以直接按照二進制的乘法規則做運算,得到0,而不必做減法。因此,在以12為模的平臺中,凡是減10的運算都可以用加2來替代,這就把乘法難題轉換成減法問題了(注:計算機的軟件結構中唯有加法器,所以大部分的運算都需要最后轉化為加法)。算術:加法、減法、乘法、除法、取余、指數運算(es6新增)。

五.

1.一個二進制數的反碼的進制就是原碼!!!

比如:真值-3,原碼1000 0011,補碼1111 1101,

原碼1111 1101,補碼1000 0011。

也可以從補碼的數學意義理解。

因為實際應用中,一般都是補碼表示,所以著重記憶補碼)。(備注:這個+9的反碼是用8位2進制來表示的,補碼表示形式這些,還有16位二進制補碼表示方式,以及32位二進制補碼表示形式,64位進制字節表示方式等。可以直接加 1111 11112.原碼的得來:原碼能夠直觀的表示一個負數3.反碼和數組之間轉換:補碼= 反碼+14.現在來推-128的補碼:-128的補碼:1000 0000 - 1000 0000=1000 0000-128的反碼:1111 1111-128的原碼:1000 0000往回推:-128的原碼 1000 0000 -128的反碼 1111 1111-128的補碼 1000 0000 + 1=1000 0000,這里實際上真正相加的是1111 1111后面的7位,第1位是符號位一直不會變,所以,當進到第8位的之后,就表示溢出了,會被放棄)5. 0只有一個補碼0000 0000,如果是這么,那么1000 0000就不會表示成-0的補碼即:補碼1000 0000唯一的表示-128在補碼中用代替了,所以補碼的表示范圍為: 共256個.注意:也有相對應的原碼和異或, 它的左值是反碼仍然是數組的加減運算如下:下面是補碼的運算:- = + =補+ 補+1)= 補= 正確- = + = 補+ 補= 補= 正確 = 原碼=反碼 =+ 1)補碼。

0的補碼是0000 0000

-1的補碼是1111 1111 -1的原碼是1000 0001

-128的補碼是1000 0000

+1的補碼是其原碼。

+1~+127的異或都是原碼。補碼逐漸加一。

補碼等于反碼加1_反碼和補碼_原碼反碼補碼轉換

-1~-127的異或都是其原碼加一。補碼逐漸加一。

雖然補碼的反碼是多少 不夠直觀,但是補碼反映出的負數的大小是直觀的,補碼大小排序和真值保持一致。

負數真值中,-1最大,-128最小,

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補 + [1000 0001]補 = [1000 0000]補。1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0。各種8位二進制的表示法的數據范圍如下:原碼: -127 ~ 127反碼: -127 ~ 127補碼: -128 ~ 127補碼運算:正數為補碼本身,負數為原碼取反加一 127為負數,其反碼為補碼0111 1111 -127為正數,其反碼為補碼0111 1111,取反1000 0000,加一,1000 0001。

在負數的補碼中,直觀上可以看出,-1的補碼是最大的:1111 1111, -128的補碼是最小的:1000 0000。

3.

80H的補碼是多少?

因為有補碼,所以是有符號數。80H即原碼1000 0000,即真值-0,所以80H的補碼是0000 0000。

六.+128

8位二進制數時,表示不下+128,16位二進制數時可以表示。因為+128=0001 0000 0000

8位二進制數的反碼范圍是-127~-0,+0,~127,反碼是-127~-0,+0~+127,補碼范圍是-128~0~+127。范圍都是256個整數。

不比如+128。-128也只在補碼表示中有。-128的補碼和原碼在8位二進制數時也都沒有,在16位及以下可以表示。

七.探究求補碼的最好的方式

-0的原碼是 1000 0000,反碼 1111 1111, 補碼 0000 0000,可以反碼加一,可以對-1求補操作。

-3的原碼是 1000 0011,反碼 1111 1100 ,補碼 1111 1101,可以反碼加一,可以對-3求補操作。

-128原碼是 沒有 反碼 沒有 補碼 1000 0000 可以對-128求補操作。

由下面三個例子可以看出,求補碼的最快捷的方式,第一位不變什么的 只適用于不是-1 -128的大部分數!

補碼等于反碼加1_反碼和補碼_原碼反碼補碼轉換

最統一的方式,應該是:

有反碼的,反碼加一(其中,符號位有進位的 舍棄符號位 只保留數值位。比如-0的補碼。更重要的是-0的補碼 是要求),或者求補操作。

沒有反碼的,求補操作。比如-128。

所以說,求補操作補碼等于反碼加1,才是對-128~+127唯一全部使用的求補碼的方式。

這樣也就解釋了,為什么所有數組都可以用字節減法運算了,因為求補操作對所有真值都適用。

求補操作:就是求(負數的)補碼

求補操作:不管符號位(不是符號位維持不變!也不是第一位保持不變!就是只用負數的絕對值,根本沒用到符號位),取負值(真值)的絕對值(即將負數的符號位變為0),對絕對值按位取反(可以覺得絕對值是無符號數),然后加一。就得到了負數的補碼。

求補操作對于求-0,-128也都適用。

例子:求3CH-90H。分為有符號數和無符號數時。

0011 1100

- 1001 0000

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

3CH 和90H 不是真值!只有十進制是真值,而 十六進制或者八進制 都是為了書寫二進制碼方便。所以才說3CH可能是無符號數 也或許是有符號數!

3CH 和90H 就是兩個二進制碼!這兩個二進制碼可能是無符號數或者有符號數!

二進制碼(二進制數)分為有符號數和無符號數。

有符號數時,X-Y=X+(-Y)補,所以,求-90H的補碼,即求-1001 0000的補碼。即對-1001 0000求補操作!不是對1001 0000求補操作!90H是絕對值,-90H是真值,1001 0000是絕對值的二進制碼。

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

這里解釋一下題目要求的含義:

(1)機器只認識二進制。十六進制和八進制是為了人書寫簡單而設立的。

(2)有符號數和無符號數說的都是二進制數(二進制碼)。

3CH的二進制碼是唯一的,但是當它是有符號數時和是無符號數時 的真值顯然是不同的。

本文來自互聯網,由機器人自動采編,文章內容不代表本站觀點,請讀者自行辨別信息真偽,如有發現不適內容,請及時聯系站長處理。

    相關閱讀
    波克捕鱼小米版下载