關於補碼 無符號及有符號型別的理解

2021-10-25 22:34:52 字數 691 閱讀 6429

對於數值儲存有補碼、原碼、反碼三種方式:

補碼:解決負數加法運算正負零問題,彌補了反碼的不足。

原碼:可直觀反映出資料的大小。

反碼:解決負數加法運算問題,將減法運算轉換為加法運算,從而簡化運算規則

負值採用反碼的形式進行儲存,計算機通過第一位來判斷乙個數值是否為負數,當第一位為1時,則為負數,否之則為正數,而對於負數想要得到為十進位制的負數則需要對其取補碼的補碼,接下來以例項解析:

對於數值-5而言,5的二進位制為0000 0101,取反碼為1111 1010,補碼則為1111 1011,將其儲存至計算機中。

對於數值6而言,其二進位制為0000 0110,將其儲存至計算機中。

對於數值3而言,其二進位制為0000 0011,將其儲存至計算機中。

當我們對-5+6進行運算時,計算機直接將兩個二進位制相加,得到0000 0001,此時其第一位為0,則判斷為正數1。

當我們對-5+3進行計算,得到1111 1110,判斷得到第一位為1,則為負數,對其取的補碼為0000 0010,則其為-2。

int c =-5

;printf

("%d,%u\r\n"

,c);

//%d表示有符號列印,而%u表示無符號列印

總結:

對於有符號和無符號而言,取決於編譯器對其的解釋,而對於負數以補碼形式儲存,則是為了方便計算。

無符號數 有符號數 與 補碼

本文是深入理解計算機系統這本書裡面關於補碼有符號數無符號數章節的乙個摘要和讀書報告,我個人認為這本書關於這一段的表述,要比絕大多數網上的部落格甚至是國內教材要深入淺出的多.同時由於markdown的文件表示公式很麻煩,本文將大量使用書中的截圖作為公式使用.書中採用乙個函式b2u w binary t...

關於有符號與無符號的位元組

經歷過幾個時期,一直都用無符串的,總感覺有乙個符號位非常的不靠譜,編譯器什麼時候給你轉一下型別,或者幹了什麼 後來又覺得c嘛,不會管你的到底是 1 還是255,反正都一樣,什麼型別啊,都是浮動,不就是一段記憶體長這樣嘛 後來又變了,覺得unsigned char真是麻煩,還得這麼長或者typedef...

有符號型別與無符號型別值範圍

以char為例 最小值為 signed char p 0x80 最大值為 signed char q 0x7f p,最高為1時表示為負數,絕對值為2 7次方 0x80 0x7f 0xff 1 面試題int為4位元組 unsigned int p 6 signed int q 20 p q的十六進製制...