《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 計算機系統原理(八) C語言的有符號與無符號、二進制整數的擴展與截斷

計算機系統原理(八) C語言的有符號與無符號、二進制整數的擴展與截斷

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

開篇請各位猿友允許LZ啰嗦幾句,最近一直在寫計算機系統原理這系列文章,也已經下定決心要把這本書的內容寫完。主要目的其實是為了鞏固LZ的理解,另外也想把這些內容分享給猿友們,畢竟LZ覺得這些內容對程序猿的實力還是有著很大的潛在提高的。

只是這種原理性的文章寫起來相對復雜與繁瑣,較對起來也比較困難,因為文章里充斥著各種各樣的數學符號,不過相對于這樣的寫作難度來說,其受歡迎程度,卻遠遠比不上一些難度較低的雜文。這一點從LZ的博客就能很明顯的看出,LZ博客排名前幾的文章,幾乎全部都是LZ寫的一些雜談,比如經歷、建議、感悟等等這一類的。

不過LZ也很理解這種現象,畢竟雜文看起來不怎么需要動腦子,內容相對來說也比較有趣,而且說不定偶爾也能有意外的大收獲,受歡迎自是無可厚非的。不過對于計算機系統原理這種文章來說,倘若各位猿友能夠堅持看下去的話,應該是會有不少的收獲的。

此外LZ也希望各位猿友在觀看之余,也不妨給予LZ一些鼓勵和支持,這樣不僅LZ的動力會大大增加,也會由于猿友們的鼓勵而產生更大的責任感,從而更加費心的將內容更簡單的解釋清楚。

廢話就到此結束吧,再寫下去的話估計有猿友要忍不住吐槽LZ廢話連篇了。就此打住,其實說了這么多,LZ就是想說五個字,“點個推薦吧。”

引言

在上一章中,我們著重介紹了整數的表示方式,也就是無符號編碼和補碼編碼。本次我們來看一下二進制整數的擴展與截斷,這部分內容是與C語言掛鉤介紹的。因此我們首先來簡單的看一下C語言的有符號數和無符號數。

C語言中的有符號數和無符號數

有符號數和無符號數的本質區別其實就是采用的編碼不同,前者采用補碼編碼,后者采用無符號編碼。

在C語言中,有符號數和無符號數是可以隱式轉換的,不需要手動實施強制類型轉換。不過也正是因為如此,可能你不小心將一個無符號數賦給了有符號數,就會造成出乎意料的結果,就像下面這樣。

#include <stdio.h>
   
int main(){
   short i = -12345;
   unsigned short u = i;
   printf("%d %d\n",i,u);
}


一個不小心,一個負數就變成正數了,再看下面這個程序,它展示了在進行關系運算時,由于有符號數和無符號數的隱式轉換所導致的違背常規的結果。

#include <stdio.h>
   
int main(){
   printf("%d\n",-1 < 0U);
   printf("%d\n",-12345 < 12345U);
}


可以看到,兩個結果都為0,也就是false,這與我們直觀的理解是違背的,原因就是因為在比較的過程中,有符號數被隱式的轉換成了無符號數進行比較。

擴展

當我們將一個短整型的變量轉換為整型變量時,就涉及到了位的擴展,此時由兩個字節擴充為四個字節。

在進行位的擴展時,最容易想到的就是在高位全部補0,也就是將原來的二進制序列前面加入若干個0,也稱為零擴展。還有一種方式比較特別,是符號擴展,也就是針對有符號數的方式,它是直接擴展符號位,也就是將二進制序列的前面加入若干個最高位。

對于零擴展來說,很明顯擴展之后的值與原來的值是相等的,而對于符號擴展來說,則是一樣,只不過沒有零擴展來的直觀。我們在計算補碼時有一個比較簡單的辦法,就是符號位若為0,則與無符號是類似的。若符號位為1,也就是負數時,可以將其余位取反最終再加1即可。因此當我們對一個有符號的負數進行符號擴展時,前面加入若干個1,在取反之后都為0,因此依舊會保持原有的數值。

總之,在對位進行擴展時,是不會改變原有數值的。

在書中對于負數的符號擴展還給出了這一過程的證明,LZ這里就不多做敘述了,其實這個證明很簡單,就是利用了補碼編碼的公式而已。需要多提一句的是,這里使用了歸納法證明,因此這里只是擴展了一位,具體過程如下。

截斷

截斷與擴展相反,它是將一個多位二進制序列截斷至較少的位數,也就是與擴展是相反的過程。

根據我們的直觀判斷也不難發現,截斷可能會導致數據的失真。對于無符號編碼來說,截斷后就是剩余位數的無符號編碼數值。在書中給出了這一簡單過程的證明,它主要是想表明截斷前與截斷后的數值的關系是取模所得到的。


對于補碼編碼來說,截斷后的二進制序列與無符號編碼是一樣的,因此我們只需要多加一步,將無符號編碼轉換為補碼編碼就可以了。

因此對于無符號編碼和補碼來說,可以得到以下兩個公式。

其它語言中的有符號與無符號

從上面的分析不難看出,具有有符號和無符號數的語言,可能會因此引起一些不必要的麻煩,而且無符號數除了能表示的最大值更大以外,似乎并沒有太大的好處。因此有很多語言是不支持無符號數的。

比如LZ所使用的Java語言,就只有有符號數,這樣省去了很多不必要的麻煩。無符號數很多時候只是為了表示一些無數值意義的標識,比如我們的內存地址,此時的無符號數就有點類似于數據庫主鍵或者說鍵值對中的鍵值的概念,僅僅是一個標識而已。

文章小結

本文主要闡述了C語言當中的有符號數和無符號數,以及低位轉高位的擴展、高位轉低位的截斷運算,下一章我們將講解很重要的一節內容,整數的二進制運算。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美特黄视频| 国产精品高潮呻吟久久| 日韩视频精品在线观看| 欧美中文日韩| 国产精品免费看久久久香蕉| 亚洲二区视频| 国产日本精品| 国产精品人成在线观看免费| 欧美日韩国产首页| 欧美—级a级欧美特级ar全黄| 美国十次成人| 久久久久亚洲综合| 久久久精品免费视频| 欧美在线三级| 久久国产精品一区二区| 欧美一区二区女人| 欧美一级在线亚洲天堂| 午夜天堂精品久久久久| 午夜精品亚洲| 亚洲免费影视第一页| 午夜久久美女| 欧美在线视频免费| 久久国内精品自在自线400部| 欧美在线观看www| 久久精品国产精品亚洲综合 | 亚洲精品综合精品自拍| 亚洲日本中文字幕| 亚洲国产婷婷香蕉久久久久久99| 欧美日韩高清在线一区| 欧美精品福利| 欧美日韩中文字幕在线| 欧美体内she精视频在线观看| 欧美视频一区二区在线观看| 国产精品久久久久久模特| 国产精品一区二区三区乱码| 国产一区二区久久| 在线日韩av| 一区二区三区产品免费精品久久75| 亚洲无亚洲人成网站77777| 午夜精品久久久久久久99黑人| 久久av老司机精品网站导航| 亚洲日本激情| 亚洲一区二区综合| 久久人91精品久久久久久不卡| 欧美高清不卡| 国产精品视频免费观看| 国内精品久久久久久久97牛牛| 亚洲大片av| 亚洲精品一级| 亚洲综合好骚| 亚洲国产综合91精品麻豆| 夜夜夜精品看看| 欧美一区影院| 欧美黑人在线播放| 国产精品久久久久久影院8一贰佰| 国产一区日韩二区欧美三区| 亚洲国产精品久久| 亚洲视频高清| 亚洲国产成人久久综合| 中文国产成人精品| 久久久噜噜噜久久| 欧美网站在线观看| 红桃视频亚洲| 一本色道久久综合亚洲二区三区| 欧美亚洲午夜视频在线观看| 亚洲美女性视频| 欧美一区二区在线免费播放| 欧美激情精品久久久久久黑人 | 欧美日韩精品一区二区三区四区| 国产精品私人影院| 亚洲国产欧美久久| 午夜精品视频在线| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲精品一区二区网址| 羞羞色国产精品| 一区二区三区免费观看| 久久久不卡网国产精品一区| 欧美日韩一区二区免费视频| 国精产品99永久一区一区| 99国产精品国产精品久久| 久久av一区二区| 午夜精品免费在线| 欧美日韩国产在线看| 黄色成人片子| 亚洲视频一区| 夜夜嗨av色综合久久久综合网 | 免费看亚洲片| 国产精品一区视频网站| 亚洲精品一区二区三区四区高清| 亚洲第一主播视频| 欧美有码在线观看视频| 欧美日韩成人精品| 在线精品亚洲| 欧美在线三区| 欧美一区二区三区免费在线看| 欧美日本在线| 亚洲国产另类精品专区| 久久av一区二区三区漫画| 午夜精品一区二区三区在线| 欧美日韩国产成人在线91| 亚洲成色777777在线观看影院| 欧美在线观看视频在线| 性伦欧美刺激片在线观看| 欧美日韩免费观看一区=区三区| 在线视频成人| 欧美在线观看一区二区| 欧美一级夜夜爽| 国产精品色婷婷久久58| 一区二区日韩欧美| av不卡在线| 欧美激情一区二区三区四区| 亚洲高清免费在线| 亚洲国产欧美在线| 久久综合给合| 黄色精品在线看| 久久精品成人欧美大片古装| 欧美在线看片| 国产午夜精品久久久| 亚洲欧美日韩国产一区二区三区| 亚洲女性裸体视频| 国产精品chinese| 亚洲亚洲精品在线观看| 亚洲性视频网址| 国产精品久久久久久久久久久久久久| 一二三区精品福利视频| 一区二区三区精品在线| 欧美午夜久久| 亚洲一区亚洲| 久久精品免费| 国内精品久久久久影院 日本资源| 欧美一区二区视频在线| 久久日韩粉嫩一区二区三区| 黄网站色欧美视频| 亚洲欧洲日本一区二区三区| 蜜臀久久久99精品久久久久久| 亚洲动漫精品| 一区二区三区欧美在线观看| 欧美视频在线播放| 亚洲天堂男人| 欧美一区二区三区免费看| 国产亚洲人成a一在线v站| 久久精品视频免费播放| 欧美xart系列高清| 日韩亚洲精品电影| 亚洲影音先锋| 国产三级欧美三级| 亚洲国产婷婷香蕉久久久久久| 欧美成人一品| 一区二区日韩欧美| 久久九九国产| 亚洲国产精品热久久| 亚洲视频一区二区| 国产精品一区二区在线| 久久精品一区四区| 欧美精品久久久久久久免费观看 | 欧美日韩国产系列| 亚洲图片在线观看| 久久久av毛片精品| 亚洲精品美女免费| 午夜精品久久久久久久99水蜜桃| 国产午夜精品久久久久久久| 亚洲精品日韩精品| 国产精品初高中精品久久| 欧美一级欧美一级在线播放| 免费亚洲视频| 亚洲视频电影在线| 久久免费黄色| 亚洲精品日韩综合观看成人91| 午夜精彩视频在线观看不卡 | 国产伦精品一区二区三区| 亚洲电影毛片| 欧美日韩视频| 欧美在线免费| 欧美日韩一区二区三区免费看| 亚洲欧美视频在线观看| 欧美激情视频免费观看| 亚洲主播在线| 欧美国产一区二区| 亚洲一区二区三区视频播放| 美国十次成人| 亚洲女女女同性video| 欧美激情精品久久久久久大尺度| 亚洲欧美大片| 欧美日韩和欧美的一区二区| 欧美在线观看一二区| 欧美日韩在线不卡| 亚洲第一天堂av| 国产精品亚洲综合色区韩国| 亚洲精品免费观看| 国产亚洲激情视频在线| 一区二区三区成人精品| 极品尤物久久久av免费看| 亚洲宅男天堂在线观看无病毒| 在线精品国精品国产尤物884a| 亚洲欧美视频在线| 亚洲精品在线免费| 久久在线播放| 午夜精品久久久久久久99黑人 | 国产精品亚洲综合| 中文精品一区二区三区|