
補碼運算為什么要舍去進位(補碼取反就是偏移碼)

各位老鐵們好,相信很多人對補碼運算為什么要舍去進位都不是特別的了解,因此呢,今天就來為大家分享下關于補碼運算為什么要舍去進位以及補碼取反就是偏移碼的問題知識,還望可以幫...
各位老鐵們好,相信很多人對補碼運算為什么要舍去進位都不是特別的了解,因此呢,今天就來為大家分享下關于補碼運算為什么要舍去進位以及補碼取反就是偏移碼的問題知識,還望可以幫助大家,解決大家的一些困惑,下面一起來看看吧!
什么是補碼加減運算溢出判別溢出有哪幾種方法并我說明工作原理
1)補碼加法運算:
整數:[A]補+[B]補=[A+B]補(模為2的n+1次方,因為可能會有進位)
小數:[A]補+[B]補=[A+B]補(模為2,因為A和B都小于1)
(2)補碼減法運算:
因為A-B=A+(-B),所以減法可以變通為加法進行計算。
整數:[A-B]補=[A]補+[-B]補(模為2的n+1次方)
小數:[A-B]補=[A]補+[-B]補(模為2)
在做補碼加減法時,只需將符號位和數值部分一起參加運算,并且將符號位的進位自然丟掉就可以了。但是,當運算結果超出機器字長所能表示的數值范圍,這種情況叫做溢出。
(3)判斷溢出:
溢出出現的情況:正數+正數,負數+負數,正數-負數,負數-正數這四種情況,當參加運算的兩個數的符號(正負)相同,而結果則與這2個數的符號不同,即為溢出。
計算機中通常將兩個參與運算的數的符號位產生的進位與最高有效位(",""."后的那位)產生的進位進行異或操作(無進位即進位為0),異或結果為1,是溢出,異或結果為0,無溢出。
補碼溢出怎么判斷
運算的結果大于數值設備所能表示數的范圍,就會產生溢出。如何判斷補碼溢出:可以通過最高位與次高位進位來判斷:若最高數值位向符號位的進位值與符號位產生的進位輸出值不相同,則表明加減運算產生了溢出。溢出現象應當作一種故障來處理,因為它使結果數發生錯誤
補法加法與減法的運算規則
為了簡單下面用一個字節表示一個整數
-54原碼10110110反碼11001001補碼11001010
-30原碼10011110反碼11100001補碼11100010
反碼相加
11001001+11100001->10101010+1=10101011->(取反)11010100(-84)
補碼相加
11001010+11100010->10101100->(取補碼)11010100(-84)
反碼:一個數如果為正,則它的反碼與原碼相同;
一個數如果為負,則符號位為1,其余各位是對原碼取反。
兩個數的二進制反碼求和的運算規則:
1、從低位到高位逐列進行運算;
2、0+0=1,0+1=1,1+1=0(進位1加到下一列);
3、最高位相加產生的進位,要在最后的結果加1.
補碼:一個數如果為正,則它的原碼、反碼、補碼相同;
一個數如果為負,則符號位為1,其余各位是對原碼取反,然后整個數加1。
補碼加減法運算法則如下:
1、參加運算操作的數都用補碼表示。
2、數據的符號與數據一樣參加運算。
3、求差時將負減數求補,用求和代替求差,將減法運算轉化為補碼的加法運算。
4、運算結果為補碼。如果符號位為0,表明運算結果為正;如果符號位為1,則表明結果為負。
5、符號位的進位為模值,應該去掉。
為什么有符號乘法結果取補碼
丟開教科書式的概念,想想為什么要有補碼這個東西,為什么符號位會產生。
定義:
原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用:表示負號,數值一般用二進制形式表示。
機器數的反碼可由原碼得到。如果機器數是正數,則該機器數的反碼與原碼一樣;如果機器數是負數,則該機器數的反碼是對它的原碼(符號位除外)各位取反而得到的。
機器數的補碼可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,并在未位加1而得到的。
如果是為了考試,死記即可。但我總想搞清楚為什么計算機里面的數要這樣子表達?意義何在?-128的補碼為什么是10000000?為什么補碼有這么奇怪的運算規則?計算機算減法的時候都需要從源碼到補碼的計算嗎?
思路
計算機里面,只有加法器,沒有減法器,所有的減法運算,都必須用加法進行。
用補數代替原數,可把減法轉變為加法。出現的進位就是模,此時的進位,就應該忽略不計。
二進制下,有多少位數參加運算,模就是在1的后面加上多少個0。
補碼就是按照這個要求來定義的:正數不變,負數即用模減去絕對值。
補充解釋一下“模”的概念,可以參照離散數學里面的環:
考慮時鐘上時間的計算,假設現在時針指向數字3,若問“6小時前時針指向的數字是幾”,則可以:
1.將時針逆時針撥動6格。
2.將時針順時針撥動12-6=6格。
兩者的結果是一樣的。這里稱12為“模”。
故有3時-6個小時=3時+(12-6個小時),這里可以看到將減法轉換成加法的過程,即“加上模減去絕對值的差”。
所以,假設模是10,有效位數為1,當我們計算9-7的時候:
9-7=>9+(10-7)=12,去掉最高的位后,得到2,這是正確的結果。
作者的意思是說,計算機里面所有數都以補碼形式保存,加減運算都是補碼之間的加法運算。然后作者提出了一個我之前沒聽過的觀點:
補數和補碼的定義式里面,根本就沒有什么符號位。這最高位的1、0是自然出現的,并不是由人來規定的。
的確,符號位在補碼運算里面是“模”,本身并不帶符號的意義。因為計算機將加法轉換成加上一個“負數”,而負數又以補碼的形式表現。補碼比源碼多一位,從這多出來的一位可以推斷出原來數字的正負號,所以成為了符號位。也可
補碼為什么加1
簡單地說,補碼就是反碼加1。
計算機中為什么要使用補碼呢?主要原因:1、使用補碼,可以將符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被舍棄
好了,關于補碼運算為什么要舍去進位和補碼取反就是偏移碼的問題到這里結束啦,希望可以解決您的問題哈!
本文鏈接:http://www.wzyaohuidianqi.cn/ke/3221.html
