《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 計算機系統原理(七) 整數的表示方式精解:無符號與補碼編碼

計算機系統原理(七) 整數的表示方式精解:無符號與補碼編碼

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

上一章我們簡單的介紹了布爾代數以及C語言的位運算,本次我們主要來看,二進制如何表示整數,這是很重要的一章,希望各位猿友莫要錯過。

C語言中的整數類型及范圍

我們依然以C語言為例,C語言當中提供了多種整數類型,一共十種,位數為1、2、4、8,其中32位機器上,4位的有兩種,在64位機器上,8位的有兩種。不過C語言有它的最小數值范圍,也就是說C語言要求這些數據類型至少要滿足一個標準的范圍。下圖是C語言對整數類型要求的最小表示范圍。

仔細看的話,可以發現,C語言只要求有符號數的范圍是對稱的,另外就是int和long類型的位數要求都比較低,分別是2位和4位。

可以看到以上的表中,每一種整數類型都可以加unsigned關鍵字,來表示一個無符號數,即沒有正負之分。在書中,給出了無符號數的定義,LZ將它簡化一下,對于一個w位的二進制來說,它的無符號表示為以下形式。

對于一個無符號編碼來說,它的最大值和最小值很好確定,對于一個w位的二進制序列來說,當所有位都為0時,則為最小值,即

                               UMinw = 0

而當所有位都為1時,則為最大值,根據等比數列的求和公式,即

                               UMaxw = 1 * (1-2w) / 1 - 2 = 2w - 1

如果把上述的定義看成是一個函數的話,那么這個函數就是一個雙射。也就是說,對于任意整數x,當0 =< x < 2w的時候,存在唯一的二進制序列與其對應。反過來也是一樣的,對于任意一個w位的二進制序列,都存在唯一一個整數x滿足0 =< x < 2w,與這個二進制序列對應。

無符號編碼屬于相對較簡單的格式,因為它符合我們的慣性思維,上述定義其實就是對二進制轉化為十進制的公式而已,只不過在一向嚴格的數學領域來說,是要給予明確的含義的。

補碼編碼

無符號編碼符合人的慣性思維是沒錯,但是可惜的是,它無法表示負整數。因此我們需要一種能夠表示負數的整數表示方式,這就是補碼編碼。與無符號編碼一樣,書中依然給出了補碼編碼的定義,即對于任意一個w位的二進制來說,它的補碼表示為以下形式。

這里最高位xw-1為符號位,當它為1時,該公式得到的值為負數,當為0時,得到的則為正數。

我們觀察這個公式,不難看出,補碼格式下,對于一個w位的二進制序列來說,當最高位為1,其余位全為0時,得到的就是補碼格式的最小值,即

                            TMinw = -2w-1

而當最高位為0,其余位全為1時,得到的就是補碼格式的最大值,根據等比數列的求和公式,即

                            TMaxw = 1 * (1 - 2w-1) / 1 - 2 = 2w-1-1

與無符號編碼一樣,如果把上述的定義看成是一個函數的話,那么這個函數同樣是一個雙射。也就是說,對于任意整數x,當-2w-1 =< x < 2w-1的時候,存在唯一的二進制序列與其對應。反過來,對于任意一個w位的二進制序列,都存在唯一一個整數x滿足-2w-1 =< x < 2w-1,與這個二進制序列對應。

相對于無符號編碼來說,補碼編碼與我們的慣性思維有些不同,因此直觀的理解起來會有些別扭,不過作為一個程序猿,我們應該有一顆半機器的腦子,盡量去適應機器的習慣。

兩種編碼的轉換

在C語言當中,我們經常會使用強制類型轉換,而在之前的章節中,LZ也提到過強制類型轉換。強制類型轉換不會改變二進制序列,但是會改變數據類型的大小以及解釋方式,那么考慮相同整數類型的無符號編碼和補碼編碼,數據類型的大小是沒有任何變化的,變化的就是它們的解釋方式。比如1000這個二進制序列,如果用無符號編碼解釋的話就是表示8,而若采用補碼編碼解釋的話,則是表示-8。

考慮到上面我們已經說過,無論是無符號編碼還是補碼編碼,其映射方式都是雙射,因此它們都一定存在逆映射。如果我們定義U2Bw(x)為B2Uw(x)的逆映射,則對于任意一個整數x,如果0 =< x < 2w,經過U2Bw(x)的計算之后,將得到唯一一個二進制序列。同樣的,如果我們定義T2Bw(x)為B2Tw(x)的逆映射,則對于任意一個整數x,如果-2w-1 =< x < 2w-1,經過T2Bw(x)的計算之后,也將得到唯一一個二進制序列。

可以很明顯的看出,對于0到2w-1-1這個區間內的整數來說,兩種編碼得到的二進制序列是一樣的。為了得到其它區間里的整數的映射關系,我們定義

                     T2Uw(x) = B2Uw(T2Bw(x))

這個函數代表的含義是補碼編碼轉換為無符號編碼的時候,先將補碼編碼轉換為二進制序列,再將二進制序列轉換為無符號編碼,最終也就是補碼編碼轉為無符號編碼的計算。

下面我們簡單的推算一下上面的定義,究竟是如何轉換的,也就是無符號編碼與補碼編碼的關系。我們將上面無符號編碼和補碼編碼的公式相減,

即                              B2Uw(x) - B2Tw(x) = xw-12w-1 - (-xw-12w-1) = xw-12w

即                                           B2Uw(x) = xw-12w + B2Tw(x)

此處我們令x為T2Bw(x),則          B2Uw(T2Bw(x)) = xw-12w + B2Tw(T2Bw(x)) = xw-12w + x

即                                            T2Uw(x) = xw-12w + x

此時考慮xw-1的情況,當xw-1為1時,也就是補碼編碼表示負數的時候,T2Uw(x)則為2w + x 。(LZ小提示:此時x為負數,也就是說2w + x < 2w)

若xw-1為0時,則補碼編碼為正數,此時T2Uw(x) = x 。

綜上可知,有下列式子成立

從這個式子中可以很明顯的看出,最終得到的無符號數范圍為0 =< x < 2w。

相反,我們用同樣的方式也可以證明從無符號編碼到補碼編碼的公式,這一部分書中省略了,LZ這里還是寫上來,以免有的猿友不知所云。我們依然將無符號編碼和補碼編碼的公式相減

即                              B2Uw(u) - B2Tw(u) = uw-12w-1 - (-uw-12w-1) = uw-12w

即                                           B2Tw(u) = B2Uw(u) - uw-12w

此時我們令u為U2Bw(u),則    B2Tw(U2Bw(u)) = B2Uw(U2Bw(u)) - uw-12w = u - uw-12w

即                                           U2Tw(u) = u - uw-12w

此時考慮uw-1的情況,當uw-1為0時,也就是無符號編碼數值小于2w-1的時候,U2Tw(u)則為u 。

若uw-1為1時,也就是無符號編碼數值大于或等于2w-1的時候,此時U2Tw(u)= u - 2w。(LZ小提示:此時U2Tw(u)為負數,因為 u < 2w)

綜上,我們可以得到無符號編碼轉換為補碼編碼的公式

同樣的,在0至2w-1-1之間,兩者依然是相等的,而其余區間則不同。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产欧美日韩视频| 亚洲毛片在线免费观看| 欧美激情中文字幕在线| 久久久久一区二区三区| 先锋影音国产精品| 亚洲影音一区| 亚洲小说春色综合另类电影| 亚洲免费精品| 亚洲美女在线视频| 日韩视频在线免费观看| 99成人在线| 99成人在线| 一区二区三区免费看| 一本色道久久综合亚洲精品婷婷 | 欧美黄色影院| 欧美高清视频| 欧美日韩成人综合| 欧美日韩国产一区二区三区地区| 欧美精品一区二区在线播放| 欧美日韩不卡合集视频| 欧美三级在线视频| 国产精品女人网站| 国产亚洲视频在线| 在线观看一区二区精品视频| 91久久夜色精品国产网站| 亚洲精品国精品久久99热一| 99日韩精品| 亚洲男人的天堂在线| 欧美一区1区三区3区公司| 久久精品国产综合| 亚洲精品一品区二品区三品区| 99在线精品视频在线观看| 中日韩美女免费视频网站在线观看| 一区二区冒白浆视频| 亚洲欧美日韩国产中文| 久久精品导航| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲国产精品综合| 99视频精品全国免费| 亚洲男同1069视频| 久久久久久自在自线| 欧美激情综合网| 国产精品毛片一区二区三区| 国产一区激情| 亚洲精品乱码久久久久久日本蜜臀 | 欧美日韩精品系列| 国产精品美女久久久浪潮软件| 国产午夜久久| 亚洲日本va午夜在线影院| 亚洲中无吗在线| 亚洲国产精品电影在线观看| 在线亚洲欧美| 久久精品中文字幕一区| 欧美日产一区二区三区在线观看 | 欧美日韩一区二区精品| 国产日韩欧美在线播放| 亚洲国产日韩在线一区模特| 亚洲午夜在线观看| 最新国产成人av网站网址麻豆| 亚洲一区日本| 久久综合伊人77777| 国产精品v片在线观看不卡| 一区在线电影| 亚洲一区免费视频| 亚洲精品免费在线| 午夜日韩激情| 欧美国产日韩一区二区| 国产欧美欧洲在线观看| 91久久精品国产| 欧美一区二区三区在| 国产精品99久久久久久人| 久久久五月天| 国产精品久久久久久av福利软件| 在线观看精品| 先锋影音国产一区| 亚洲图片欧洲图片日韩av| 老司机一区二区三区| 国产精品影院在线观看| 日韩视频免费大全中文字幕| 亚洲福利视频免费观看| 欧美伊久线香蕉线新在线| 欧美精品一区二区在线播放| 一区二区亚洲精品| 欧美一区二区三区视频免费播放| 亚洲主播在线| 欧美日韩在线免费| 亚洲日韩视频| 亚洲国产免费| 久久久精品国产免费观看同学 | 欧美在线国产| 香蕉久久夜色精品| 欧美日韩免费精品| 91久久国产综合久久| 亚洲成在人线av| 国产精品免费视频xxxx| 亚洲国产女人aaa毛片在线| 久久精品女人的天堂av| 性欧美大战久久久久久久久| 欧美三日本三级少妇三99| 亚洲高清免费在线| 久久精品卡一| 久久女同精品一区二区| 国产午夜精品久久久久久久| 亚洲欧美日韩在线综合| 亚洲制服少妇| 国产精品久久网站| 一区二区三区欧美视频| 亚洲视频电影在线| 欧美视频不卡| 99国产精品视频免费观看| 亚洲免费激情| 欧美日韩岛国| 亚洲美女中文字幕| 一区二区电影免费在线观看| 欧美精品三级| 亚洲精品在线视频观看| 日韩视频一区二区三区| 欧美激情一区二区三区蜜桃视频| 亚洲国产另类久久久精品极度| 亚洲国产精品ⅴa在线观看| 蜜乳av另类精品一区二区| 亚洲大胆人体在线| 亚洲精品久久久久久久久久久久久 | 国产日本欧洲亚洲| 欧美一区二区黄| 久久久国产精品亚洲一区| 国产一区二区视频在线观看| 欧美中文字幕久久| 另类春色校园亚洲| 亚洲国产另类久久精品| 99re6这里只有精品视频在线观看| 欧美精品一区二区三区在线播放| 亚洲乱亚洲高清| 亚洲欧美99| 国产手机视频一区二区| 久久精品亚洲精品| 欧美成人一区二区三区| 日韩视频免费观看| 午夜精品视频一区| 激情欧美一区二区| 一本久道久久综合婷婷鲸鱼| 欧美午夜激情小视频| 亚洲一区二区三区成人在线视频精品| 新狼窝色av性久久久久久| 国产一区三区三区| 亚洲乱码国产乱码精品精可以看| 欧美日韩一卡| 亚洲欧美日韩国产一区二区三区 | 亚洲欧美精品一区| 久久人91精品久久久久久不卡| 影音欧美亚洲| 一区二区三区精品在线| 国产精品亚洲综合色区韩国| 欧美一区国产在线| 欧美激情久久久久| 亚洲午夜日本在线观看| 久久精品麻豆| 亚洲国产一区二区三区高清| 亚洲女同精品视频| 精品成人一区二区三区四区| 亚洲调教视频在线观看| 国产亚洲欧美一级| 999在线观看精品免费不卡网站| 国产精品国产三级国产aⅴ入口| 欧美一区二区三区男人的天堂| 欧美金8天国| 午夜精品久久久久| 欧美va亚洲va日韩∨a综合色| 一个色综合导航| 老色鬼精品视频在线观看播放| 一区二区三区你懂的| 另类天堂av| 亚洲专区一区二区三区| 欧美大片91| 亚洲免费视频在线观看| 欧美成人69av| 亚洲欧美日韩精品一区二区 | 亚洲自拍啪啪| 在线免费高清一区二区三区| 亚洲欧美国产高清| 亚洲国产精品成人| 欧美一区二区久久久| 亚洲国产视频直播| 久久激情视频久久| 日韩视频免费| 免费不卡视频| 亚洲欧美日韩直播| 欧美日韩视频免费播放| 亚洲电影免费观看高清| 国产精品视频网址| 夜夜嗨av一区二区三区免费区| 国产亚洲高清视频| 亚洲欧美日韩精品久久| 亚洲激情啪啪| 久久综合九色欧美综合狠狠| 亚洲在线一区二区| 欧美日韩网址| 亚洲精品美女久久7777777| 国产在线精品自拍| 欧美一二三视频|