久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

計算機原理之整數(shù)表示(原碼/反碼/補碼)

 西北望msm66g9f 2020-02-06

  大家好,我是痞子衡,,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家講的是計算機原理知識點-整數(shù)表示,。

  本系列痞子衡會給大家介紹一些關(guān)于計算機原理的有趣的知識點,,今天是系列第一節(jié)課,痞子衡要講的是計算機中最基礎(chǔ)的知識,,即整數(shù)數(shù)據(jù)表示法,。
  現(xiàn)實生活中的所有信息在計算機看來就是一堆數(shù)據(jù),計算機的工作就是和數(shù)據(jù)打交道,。簡單來說,,計算機最核心的功能就是兩個:存儲數(shù)據(jù)、處理數(shù)據(jù),。計算機首先得要能正確地存儲用戶數(shù)據(jù),,有了數(shù)據(jù)之后,計算機還要能夠按照用戶要求處理(運算)數(shù)據(jù),。今天痞子衡要講的就是數(shù)據(jù)(整數(shù))在計算機中是怎么存儲(表示)的,。

一、何謂進(jìn)制

  學(xué)過數(shù)字電路的朋友肯定知道數(shù)據(jù)的進(jìn)制表示法,,常見的有二進(jìn)制,、八進(jìn)制、十進(jìn)制,、十六進(jìn)制表示法,。在現(xiàn)實生活中我們所用的數(shù)據(jù)表示法是十進(jìn)制,即由0-9共10個數(shù)字表示所有數(shù)值,。
  任意進(jìn)制轉(zhuǎn)換成十進(jìn)制的公式為Xn-1X...X1X0=Xn-1*Rn-1+...X1*R+X0,,其中R為當(dāng)前被轉(zhuǎn)換進(jìn)制的權(quán)重值,二進(jìn)制則R=2,,八進(jìn)制R=8,,十進(jìn)制R=10,十六進(jìn)制R=16,。X可取值當(dāng)前被轉(zhuǎn)換進(jìn)制所有的單個數(shù)字(值),。
  計算機就是大規(guī)模集成數(shù)字電路,,數(shù)字電路只有兩種電平狀態(tài)(低/高),對應(yīng)到數(shù)字表示就是0,1,,所以實際上計算機只認(rèn)二進(jìn)制,,所有保存在計算機中的數(shù)據(jù)都是由二進(jìn)制來表示的。

二,、整數(shù)編碼

2.1 正負(fù)數(shù)表示(原碼)

  數(shù)據(jù)在計算機中都是用二進(jìn)制來表示的,。對于無符號整數(shù)(正整數(shù)),比如uint8_t型,,8個bit均為數(shù)據(jù)位,,用二進(jìn)制表示其范圍為8'b00000000 ~ 8'b11111111(0~255),這種所有bit均為數(shù)據(jù)位以表示無符號整數(shù)的編碼方式即為原碼,。
  但很多時候我們不僅要保存正整數(shù),,還要保存負(fù)整數(shù),此時便涉及到有符號整數(shù)的表示方法了,,此時編碼規(guī)定最高bit表示符號(0為正,,1為負(fù)),其余bit表示數(shù)據(jù)位,,這種表示有符號整數(shù)的編碼方式實際上也是原碼,。對于int8_t型,bit7為符號位,,bit6-0為數(shù)據(jù)位,,用二進(jìn)制表示其范圍為8'b10000000 ~ 8'b01111111(-128~127),有朋友可能會對這里有疑問,,似乎按照編碼規(guī)定能表示的整數(shù)范圍應(yīng)該是-127 ~ 127,,但實際并不是如此,具體痞子衡在下面會解釋,。

2.2 減法的實現(xiàn)(反碼)

  數(shù)字電路里我們都聽說過加法器,,但沒有減法器的說法,說明計算機實際上僅支持加法運算,,對于正整數(shù)做加法運算用原碼沒有任何疑義,。那么對于無符號整數(shù)做減法運算(等同于有符號數(shù)的加法運算)怎么實現(xiàn)?我們嘗試著用原碼來代入運算,,比如129-7(即129+(-7)):

  8'b10000001(129原碼) + 8'b10000111(-7原碼)-------------- = 8'b????????(符號位如何參與運算,?) =9'b100001000(不區(qū)別符號位,直接運算,,最高bit由于溢出被自動丟棄) = 8'b00001000(結(jié)果為8)

  我們似乎遇到了困難,,有符號運算數(shù)的符號位如何參與運算?如果我們不區(qū)別對待符號位,,直接把它當(dāng)做數(shù)據(jù)位進(jìn)行計算,,得出的結(jié)果顯然是不對的,,所以原碼是無法被用作減法/有符號數(shù)的計算的。為了解決這個問題,,此時引入了第二種編碼方式規(guī)定(反碼),,即正數(shù)的反碼與原碼相同,負(fù)數(shù)的反碼等于原碼除了符號位外,,其余數(shù)據(jù)位全部取反,。有了反碼,此時我們用反碼重新計算129-7:

   8'b10000001(129反碼) + 8'b11111000(-7反碼)-------------- =9'b101111001(最高bit由于溢出被自動丟棄) = 8'b01111001(結(jié)果為反碼,,由于最高bit為0,,即表示正數(shù),,所以等同于原碼,,其值為122)

2.3 消除+/-0之爭(補碼)

  反碼看起來似乎解決了減法問題,,不妨讓我們再做一個減法運算,,比如5-5,,我們嘗試再一次用反碼解決問題:

  8'b00000101(5反碼) + 8'b11111010(-5反碼)-------------- = 8'b11111111(結(jié)果為反碼) = 8'b10000000(轉(zhuǎn)換成原碼,,根據(jù)有符號數(shù)原碼編碼規(guī)定解析為-0)

  -0是等于0的,,運算的結(jié)果是對的,,但是不是總感覺哪里不對,?是的,原碼8'b00000000表示+0,,我們已經(jīng)有+0來表示0了,,再用-0表示0顯得多此一舉,浪費了一個編碼值,。怎么解決這個問題,?此時引入第三種編碼方式規(guī)定(補碼),正數(shù)的補碼與原碼相同,,負(fù)數(shù)的補碼等于反碼加1.那現(xiàn)在我們嘗試用補碼來重新計算5-5:

   8'b00000101(5補碼) + 8'b11111011(-5補碼)-------------- =9'b100000000(最高bit由于溢出被自動丟棄) = 8'b00000000(結(jié)果為補碼,,由于最高bit為0,即表示正數(shù),,所以等同于反碼,,也等同于原碼,其值為+0)

  上述運算中使用補碼消除了運算結(jié)果為-0的問題,,但還是沒有告訴我們8'b10000000的值到底是多少,?顯然不應(yīng)該是-0,那么應(yīng)該要怎么解析8'b10000000,?有朋友說答案是-128,,是的,前面我們已經(jīng)在原碼一節(jié)中給出了答案,,那如何來理解這個答案,?首先我們得要從標(biāo)準(zhǔn)原碼定義的角度來說-128,,按照定義-128的原碼應(yīng)該是9'b110000000,轉(zhuǎn)換成補碼還是9'b110000000,,原碼與補碼一致,,截斷最高位后可得8'b10000000,講到這里,,我們似乎有點明白-128的由來了,,但這樣真的靠譜嗎?代入運算會不會影響運算結(jié)果的正確性,?我們來試試看-128+17:

  8'b10000000(-128補碼) + 8'b00010001(17補碼)-------------- = 8'b10010001(結(jié)果為補碼) = 8'b10010000(轉(zhuǎn)換為反碼) = 8'b11101111(轉(zhuǎn)換為原碼,,由于最高bit為1,即表示負(fù)數(shù),,其值為-111)

  由于用8'b10000000來表示-128參與運算并不會導(dǎo)致結(jié)果錯誤,,那么何不直接約定用8'b10000000來表示-128呢?好,,就這么愉快的決定了,!這就是-128=8'b10000000的由來。其實就是計算機里的一個異常的人為規(guī)定而已,!

2.4 編碼小結(jié)

  無論uint8_t/int8_t型數(shù)據(jù)全部使用補碼的方式在計算機中進(jìn)行存儲,,其中int8_t型數(shù)據(jù)范圍內(nèi)-128是個異常規(guī)定,無法用補碼編碼規(guī)則直接解釋,,但計算機可以自動理解識別,。
  為了鞏固知識,我們做個小練習(xí):

// a,b,c,d,e,f分別等于多少,?
uint8_t
a = -1;
uint8_t b = -128;
uint8_t
c = -129;
int8_t
d = 128;
int8_t
e = 129;
int8_t f = -129;
// 答案: a = 255, b = 128, c = 127, d = -128, e = -127, f = 127

  至此,,計算機原理知識點之整數(shù)表示痞子衡便介紹完畢了,掌聲在哪里~~~

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多