- N +

補碼運算符號位要參與嗎 補碼加減法運算規(guī)則

各位老鐵們,大家好,今天由我來為大家分享補碼運算符號位要參與嗎,以及補碼加減法運算規(guī)則的相關(guān)問題知識,希望對大家有所幫助。如果可以幫助到大家,還望關(guān)注收藏下本站,您的支持是我們最大的動力,謝謝大家了哈,下面我們開始吧!

補碼運算為什么會溢出

通常有三種表述方式(說法):

(1)兩個符號相同的補碼數(shù)相加,如果和的符號與加數(shù)的符號相反,或兩個符號相反的補碼數(shù)相減,差的符號與減數(shù)的符號相同,都屬于運算結(jié)果溢出。這種判別方法比較復(fù)雜,要區(qū)別加還是減兩種不同運算情況,還要檢查結(jié)果的符號與其中一個操作數(shù)的符號的同異,故很少使用;

(2)兩個補碼數(shù)相加減時,若最高數(shù)值位向符號位送的進位值與符號位送向更高位的進位值不相同,也是運算結(jié)果溢出。

(3)在采用雙符號位(如定點小數(shù)的模4補碼)運算時,若兩個符號位的得值不同(01或10)則是溢出。01表明兩個正數(shù)相加,結(jié)果大于機器所能表示的最大正數(shù),稱為"上溢";10表明兩個負數(shù)相加,結(jié)果小于機器所能表示的最小負數(shù),稱為"下溢";雙符號位的高位符號位,不管結(jié)果溢出否,均是運算結(jié)果正確的符號位,這個結(jié)論在乘法運算過程中是很有實際意義的。請注意,在采用雙符號位的方案中,在寄存器和內(nèi)存儲器存儲數(shù)據(jù)時,只需存一位符號,雙符號位僅用在加法器線路部分。

再次強調(diào),這三種不同說法是對同一個事實的略有區(qū)別的表述,實現(xiàn)時用到的線路可以有所區(qū)別,但問題的實質(zhì)是完全一樣的。

補碼都是有符號數(shù)嗎有沒有無符號數(shù)補碼的

補碼本質(zhì)是用來構(gòu)成一個環(huán),以實現(xiàn)一個同余運算。

你可以認為所有定位長的加減乘除都是處于同余系情況下的:以32位整數(shù)為例,你取得的結(jié)果永遠是2^32次方的余數(shù),這與有無符號無關(guān)。

你叫加法器算一個1+2,然而加法器其實做的是個同余加法,即這樣的作用是無論有符號還是無符號的運算,都可以共用同樣的加法器(乘法器)。

然后我們知道,4294967296的余數(shù)總共就4294967296種,分別是0~4294967295。但是我們希望表示一個負數(shù),那怎么做呢?于是乎就用4294967295來表示了。考慮到取值范圍,以及為了方便區(qū)分,我們定義有一半的數(shù)是正數(shù)、一半的數(shù)是負數(shù),恰恰就是二進制最高位為1則是負數(shù),最高位為0則表示正數(shù)范圍,這個就是補碼的本質(zhì)。至于補碼的計算方法,也就是取反加1,完全是因為:這與『符號位』無關(guān),它的逆運算,其實求解的是所以說到底還是個同余數(shù)論的問題。

所以你看,把x=0代入剛剛的同余方程,完全成立。

無符號數(shù)有補碼嗎

沒有。無符號數(shù)中,所有的位都用于直接表示該值的大小,最高位非符號位。所以,無符號數(shù)無原碼、反碼、補碼。

有符號數(shù)中,原碼、反碼、補碼,最高位是數(shù)符位,用于表示正負。

計算機中的有符號數(shù)有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數(shù)值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數(shù)值位,三種表示方法各不相同。

為什么有符號乘法結(jié)果取補碼

丟開教科書式的概念,想想為什么要有補碼這個東西,為什么符號位會產(chǎn)生。

定義:

原碼表示法是機器數(shù)的一種簡單的表示法。其符號位用0表示正號,用:表示負號,數(shù)值一般用二進制形式表示。

機器數(shù)的反碼可由原碼得到。如果機器數(shù)是正數(shù),則該機器數(shù)的反碼與原碼一樣;如果機器數(shù)是負數(shù),則該機器數(shù)的反碼是對它的原碼(符號位除外)各位取反而得到的。

機器數(shù)的補碼可由原碼得到。如果機器數(shù)是正數(shù),則該機器數(shù)的補碼與原碼一樣;如果機器數(shù)是負數(shù),則該機器數(shù)的補碼是對它的原碼(除符號位外)各位取反,并在未位加1而得到的。

如果是為了考試,死記即可。但我總想搞清楚為什么計算機里面的數(shù)要這樣子表達?意義何在?-128的補碼為什么是10000000?為什么補碼有這么奇怪的運算規(guī)則?計算機算減法的時候都需要從源碼到補碼的計算嗎?

思路

計算機里面,只有加法器,沒有減法器,所有的減法運算,都必須用加法進行。

用補數(shù)代替原數(shù),可把減法轉(zhuǎn)變?yōu)榧臃ā3霈F(xiàn)的進位就是模,此時的進位,就應(yīng)該忽略不計。

二進制下,有多少位數(shù)參加運算,模就是在1的后面加上多少個0。

補碼就是按照這個要求來定義的:正數(shù)不變,負數(shù)即用模減去絕對值。

補充解釋一下“模”的概念,可以參照離散數(shù)學(xué)里面的環(huán):

考慮時鐘上時間的計算,假設(shè)現(xiàn)在時針指向數(shù)字3,若問“6小時前時針指向的數(shù)字是幾”,則可以:

1.將時針逆時針撥動6格。

2.將時針順時針撥動12-6=6格。

兩者的結(jié)果是一樣的。這里稱12為“模”。

故有3時-6個小時=3時+(12-6個小時),這里可以看到將減法轉(zhuǎn)換成加法的過程,即“加上模減去絕對值的差”。

所以,假設(shè)模是10,有效位數(shù)為1,當(dāng)我們計算9-7的時候:

9-7=>9+(10-7)=12,去掉最高的位后,得到2,這是正確的結(jié)果。

作者的意思是說,計算機里面所有數(shù)都以補碼形式保存,加減運算都是補碼之間的加法運算。然后作者提出了一個我之前沒聽過的觀點:

補數(shù)和補碼的定義式里面,根本就沒有什么符號位。這最高位的1、0是自然出現(xiàn)的,并不是由人來規(guī)定的。

的確,符號位在補碼運算里面是“模”,本身并不帶符號的意義。因為計算機將加法轉(zhuǎn)換成加上一個“負數(shù)”,而負數(shù)又以補碼的形式表現(xiàn)。補碼比源碼多一位,從這多出來的一位可以推斷出原來數(shù)字的正負號,所以成為了符號位。也可

利用補碼進行加減運算必用原碼

如果值的符號位為正0,那么補碼就是原碼,直接求值,加上+號就可以如果值的符號位為負1,那么補碼需要再求補碼,然后求值,再加上-號就可以

好了,文章到此結(jié)束,希望可以幫助到大家。

返回列表
上一篇:
下一篇: