《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 計算機系統原理(九) 二進制整數的加法運算和減法運算

計算機系統原理(九) 二進制整數的加法運算和減法運算

2017-06-22
關鍵詞: 匯編語言

引言

平時的編程過程中,當進行整數運算時,經常會遇到一些奇怪的結果,比如兩個正數加出負數,兩個負數可以加出一個正數,這些都是由于數值表示的有限性導致的。下面我們來看看C語言和Java語言當中的例子。

public static void main(String[] args) {
       int a = 0x7FFFFFFF;
       int b = 0x7FFFFFFF;
       System.out.println(a);
       System.out.println(b);
       System.out.println( a + b );
   }

程序當中的a和b都是很大的正整數,結果它們相加會得到一個負數。

接下來我們再來看看C語言當中的例子,它也會具有同樣的特性。

#include <stdio.h>
   
int main(){
   int a = 0x7FFFFFFF;
   int b = 0x7FFFFFFF;
   printf("%d\n",a);
   printf("%d\n",b);
   printf("%d\n",a+b);
}


我們來看看這個程序的結果,是否與Java一致。

可以看到,在C于Java當中,結果都是一樣的,所以我們有必要對二進制整數的運算做一些簡單的了解。

無符號加法

這里LZ不想按照書中的方式去介紹,我們換一種思路,來簡單的了解一下吧。

小時候學習加法時,我們都是使用的畫表式,就是上面是被加數,下面是加數,然后左邊寫一個加號,逢10就進1,然后下面畫一條橫線,橫線下面就是我們的結果。

對于我們的二進制整數來說,其實也可以使用這種最原始的方式去計算,由此也可以認識到,二進制整數的加法也是非常簡單的。只不過它與我們平時的十進制算法有一個最大的區別,那就是我們在計算機當中進行計算時,結果的位數都是有限制的。因此在我們計算過后,可能需要對結果進行截斷操作。

前面一章我們已經講過有關截斷的內容,那么很明顯這里就可以用上了。這里使用的時候有一個前提,我們可以假設是進行w位的二進制運算,那么在運算之后的實際結果也一定是w位的。這里有兩種情況,一種是結果依然是w位的,也就是w+1位為0。第二種則是達到了w+1位,這個時候我們需要將結果截斷到w位。

第一種情況則屬于正常的加法運算,對于第二種來說,我們根據上一章的結論可以得到,假設完整的結果為sum,則實際的結果最終為 sum mod 2w。

在書中則是給出了一個公式,它得到這個結果的一個前提是兩個操作數都滿足小于2w,它與我們上面取模的結果其實是一樣的。

這里LZ再稍微解釋一下,對于第一種情況,x+y < 2w,則sum mod 2w是與sum一致的。對于第二種來說,當 2w =< x+y < 2w+1,對 x + y 進行2w的取模運算,與 x + y - 2w是等價的。

無符號的非

無符號的加法會形成一個阿貝爾群,這意味著無符號加法滿足一些特性。比如可交換,可結合等等。在這個群中,單位元為0,那么每一個群中的元素,也就是每一個無符號數u,都會擁有一個逆元u-1,滿足 u+ u-1 = 0。這個結論的來源是,對于w位上的無符號運算來講,倘若兩個無符號數的加法運算結果為2w,也就是1后面跟w個0,此時截斷之后的結果則為0。

從以上的簡單分析,我們可以很容易的得到一個無符號數的逆元滿足以下公式(公式中的左邊就是LZ寫的u-1,由于圖中的符號在博文中不好編輯,所以LZ以u-1替代)。

補碼加法

對于補碼的加法來講,我們會建立在無符號加法的基礎上來進行,這么做的一個重要前提是,它們的位表示都是一樣的。

這里書上寫的比較復雜,LZ這里稍微介紹的簡單一點,其實補碼加法就是先按照無符號加法進行運算,而后在進行無符號和有符號的轉換。因此我們根據上面的結論可以得到,對于兩個補碼編碼的有符號數來說,他們進行加法運算的最終結果為,假設實際的無符號結果為sum,那么最終的實際結果為 U2Tw(sum mod 2w)。

上面的這個結果看起來很簡單,但實際上它的運算結果還是比較復雜的,書中給出了四種情況的分析,采用數學推導和證明的方式來說明,估計對一部分數學基礎較差的猿友來講,這是一種折磨,因此LZ這里將會省去這部分分析,如果有興趣的猿友可以私底下看一下書中的原版內容。

與無符號加法不同的是,這里會出現三種結果,一種是正常的結果,一種是正溢出,一種是負溢出。

對于當正溢出的時候,我們的結果與無符號數類似,取模之后等價于減去2w。而當負溢出的時候,則剛好相反,取模之后的結果等價于加上2w。更直觀的,由于我們最終可表示的補碼數范圍在-2w-1(包含)到2w-1之間,所以我們總是要試圖將最終的實際結果保持在這個范圍之內。于是我們可以直觀的得到下面的結果。

補碼的非

對于補碼來說,它同樣的與無符號有一樣的特性,也就是對于任意一個w位的補碼數t來說,它都有唯一的逆元t-1,使得t + t-1 = 0。

一個w位的補碼數的范圍在-2w-1(包含)到2w-1之間,直觀的可以看出,對于不等于-2w-1的補碼數x來說,它的逆元就是-x。而對于-2w-1來說,它的二進制位表示為1后面跟著w-1個0,我們需要找到一個數與其相加之后結果為0。

這種時候我們需要考慮的是,如果是-x,也就是2w-1,則它的位表示需要w+1位,是不存在的。因此我們需要考慮溢出的情況,對照上面的公式2.14,負溢出的時候需要加上2w,因此-2w-1的逆元就是-2w + 2w-1 = -2w-1,也就是它本身。

綜合上面的情況,最終我們可以得到補碼的逆元滿足以下公式(這里與上面一樣,公式左邊是LZ所說的逆元t-1)。

二進制整數的減法

這一部分內容在書中沒有介紹,而且書中也沒有提及為什么沒有介紹,因此LZ在這里簡單的提上幾句。

減法運算其實是可以由加法運算替代的,我們上面已經介紹過了無符號和補碼的非,其實很多CPU是沒有減法運算器的,它們都是將減數進行逆運算以后送入加法器,然后進行加法運算,這樣得出來的結果就是減法運算最終的結果。

比如我們考慮一種簡單的情況,當w = 4時的無符號減法運算,對于 5 - 4這個減法運算來說,我們可以由 5 + 4-1(其中4-1是4的逆元的意思,不是1/4的意思)來替代這個減法運算。

為了更加直觀,LZ帶各位來算一下,首先4的逆元根據上面的公式可以得到為 4-1 = 24 - 4 = 12 。那么我們現在需要對5和12進行加法運算,它們的位表示分別為 0101和1100,結果為10001,也就是十進制17的位表示。不過由于我們的w = 4,因此截斷之后結果為0001,也就是十進制的1。最終可以得到 5 - 4 = 1。

對于5 - 4來說,是考慮的結果為正的情況。或許有的猿友會對結果為負或者說是無符號數溢出的情況下有疑問,因此LZ這里對這種情況也做一個簡單的介紹。我們考慮一個簡單的計算 0 - 1,我們可以得到1-1 = 24 - 1 = 15。此時對0和15進行加法運算,他們的位表示分別為0000和1111,結果為1111。

看到這里估計有的猿友會奇怪了,這怎么回事,0 - 1 = 15?

當然不是,這個結果其實是正確的。考慮使用補碼編碼來解析1111這個位表示,它代表的值就是-1。15是1111這個位表示在無符號編碼情況下的解析結果。

因此LZ這里也給出一個公式,就是對于兩個整數x和y來說,x - y = x + y-1。這里需要特別說明的是,這個公式代表的意義是位表示,而不是實際的數值。

文章小結

本次我們主要介紹了二進制整數的加法運算,除此之外LZ還多加了一部分,就是減法的簡單介紹。下一章我們將繼續講解整數的乘除法運算。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩中文字幕精品| 久久久精品久久久久| 国产精品一区二区黑丝| 亚洲欧美日韩精品久久亚洲区 | 久久久精品国产一区二区三区| 在线亚洲成人| 亚洲伊人一本大道中文字幕| 国产欧美视频在线观看| 久久久青草青青国产亚洲免观| 亚洲第一黄色| 亚洲精一区二区三区| 欧美午夜在线视频| 欧美专区一区二区三区| 亚洲第一中文字幕| 亚洲精品护士| 国产欧美午夜| 国产欧美日韩亚州综合| 国产美女精品人人做人人爽| 欧美成人免费大片| 亚洲综合日韩| 久久国产精品黑丝| 亚洲伦理一区| 一本色道久久综合亚洲精品不| 国产日韩欧美综合一区| 欧美顶级艳妇交换群宴| 欧美成人亚洲成人| 欧美精品三级在线观看| 久久国产精品网站| 亚洲美女91| 午夜亚洲视频| 亚洲三级免费电影| 亚洲人体影院| 狠狠干综合网| 国产精品家教| 欧美成人免费在线观看| 免费在线观看成人av| 香蕉久久一区二区不卡无毒影院| 亚洲第一视频网站| 亚洲精品免费一二三区| 午夜在线不卡| 久久精品视频99| 亚洲在线播放| 欧美在线网址| 亚洲久久成人| 亚洲制服av| 9色porny自拍视频一区二区| 久久精彩免费视频| 亚洲片区在线| 久久国产黑丝| 99国产精品久久久久久久久久| 欧美一区二区三区免费视| 99国产精品国产精品久久| 加勒比av一区二区| 国产伦理一区| 精品成人乱色一区二区| 亚洲精品一品区二品区三品区| 亚洲午夜激情| 一区二区成人精品| 亚洲欧美在线一区二区| 亚洲精华国产欧美| 亚洲天堂成人在线观看| 亚洲精选一区| 午夜精品久久久久久久99黑人| 久久免费一区| 久久久夜夜夜| 欧美日韩国产在线播放网站| 免费在线亚洲欧美| 欧美午夜久久久| 在线播放国产一区中文字幕剧情欧美 | 亚洲一级黄色片| 久久久综合视频| 欧美亚日韩国产aⅴ精品中极品| 国产一区二区三区在线观看网站| 国产精品国产三级国产专播品爱网| 国产日韩欧美精品一区| 亚洲国产欧美久久| 亚洲福利久久| 欧美亚一区二区| 影院欧美亚洲| 亚洲免费一在线| 一本一本久久| 亚洲图中文字幕| 久久午夜av| 欧美日韩在线精品| 欧美少妇一区二区| 黄色成人在线网址| 亚洲综合视频在线| 在线视频中文亚洲| 美腿丝袜亚洲色图| 欧美成人免费va影院高清| 国产精品试看| 99国产精品99久久久久久粉嫩| 亚洲第一成人在线| 欧美一区二区高清| 久久av最新网址| 欧美三级电影精品| 亚洲国产精品一区在线观看不卡 | 中文一区二区在线观看| 麻豆久久久9性大片| 国产日韩亚洲欧美精品| 亚洲午夜精品久久久久久浪潮| 一本色道久久综合亚洲91| 欧美aa国产视频| 狠狠入ady亚洲精品经典电影| 亚洲在线第一页| 亚洲欧美日韩电影| 欧美日韩一二区| 亚洲美女视频在线观看| 亚洲人成艺术| 毛片av中文字幕一区二区| 国外视频精品毛片| 亚洲精品123区| 亚洲国内在线| 国产精品99久久99久久久二8 | 欧美大香线蕉线伊人久久国产精品| 国内一区二区三区| 欧美一区二区精品久久911| 性欧美video另类hd性玩具| 国产精品电影在线观看| 夜夜嗨av一区二区三区免费区| 一区二区三区欧美成人| 欧美日韩色婷婷| 99在线精品观看| 一本色道久久88亚洲综合88| 欧美精品久久久久久| 亚洲精品少妇| 亚洲少妇在线| 欧美午夜宅男影院| 亚洲一区二区在线观看视频| 午夜综合激情| 国产日韩av在线播放| 欧美一区二区三区在线播放| 久久久久久一区二区三区| 国产中文一区二区三区| 亚洲第一精品久久忘忧草社区| 噜噜爱69成人精品| 欧美午夜精品久久久久久孕妇 | 免费久久99精品国产自在现线| 一区二区视频免费完整版观看| 亚洲黄色三级| 欧美精品v国产精品v日韩精品| 99re8这里有精品热视频免费 | 欧美激情久久久久久| 国产精一区二区三区| 午夜精品久久99蜜桃的功能介绍| 久久精品国产69国产精品亚洲| 国产在线精品成人一区二区三区| 久久精品免费电影| 欧美激情视频一区二区三区免费 | 亚洲精品久久久久久一区二区| 欧美精品一区二区三区很污很色的| 亚洲日本视频| 亚洲欧美日韩天堂一区二区| 国产日本欧美一区二区三区在线 | 亚洲人成免费| 亚洲影视中文字幕| 国产一区二区三区直播精品电影| 亚洲日韩中文字幕在线播放| 欧美日韩在线影院| 午夜精品免费在线| 欧美成人午夜激情在线| 正在播放亚洲| 亚洲毛片一区二区| 欧美色图麻豆| 欧美与黑人午夜性猛交久久久| 蜜臀久久99精品久久久画质超高清| 亚洲美女啪啪| 久久久.com| 亚洲精品视频在线看| 午夜综合激情| 亚洲国产一区二区三区在线播 | 亚洲二区免费| 欧美日韩美女一区二区| 小嫩嫩精品导航| 亚洲欧美日韩国产综合| 黄色一区二区在线观看| 一区二区日韩精品| 国产一区二区日韩精品| 99热精品在线| 国产一区二区三区在线观看精品 | 亚洲欧洲日本专区| 国产精品久久一区二区三区| 亚洲狼人综合| 欧美有码视频| 日韩视频一区二区| 久久久人成影片一区二区三区观看 | 国产综合激情| 亚洲一区二区三区涩| 极品尤物av久久免费看| 亚洲欧美国产精品桃花| 亚洲国产综合91精品麻豆| 欧美一区二区在线免费播放| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美在线地址| 99精品热视频只有精品10| 欧美成黄导航| 欧美一区二区三区日韩视频| 欧美新色视频| 99精品国产高清一区二区| 好吊妞**欧美|