C語(yǔ)言學(xué)習(xí)筆記

1. C程序編譯

C程序的編譯可以簡(jiǎn)單分為4個(gè)步驟:預(yù)處理摊唇,編譯,匯編涯鲁,巷查。

  • 預(yù)處理 展開(kāi)頭文件·刪除注釋,條件編譯(例如#if抹腿,#ifdef)岛请,宏定義展開(kāi) (.i文件) gcc -E ex.c -o ex.i
  • 編譯 檢查語(yǔ)法,將高級(jí)語(yǔ)言轉(zhuǎn)換成匯編語(yǔ)言(.s文件) gcc -S ex.i -o ex.s
  • 匯編 將匯編語(yǔ)言轉(zhuǎn)化為機(jī)器語(yǔ)言(.o文件) gcc -c ex.s -o ex.o
  • 鏈接 鏈接不同系統(tǒng)下的庫(kù)文件(可執(zhí)行文件) gcc ex.o ex

2. 原碼警绩、反碼髓需、補(bǔ)碼

2.1 基礎(chǔ)概念

  • 數(shù)據(jù)在技術(shù)及內(nèi)部是以補(bǔ)碼的形式存儲(chǔ)的
  • 數(shù)據(jù)分為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)。
    • 正數(shù)的首位地址為0房蝉,其原碼是有十進(jìn)制轉(zhuǎn)二進(jìn)制
    • 負(fù)數(shù)的首位地址為1僚匆,其原碼是十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù),再講首位地址改為1搭幻。
  • 對(duì)于一個(gè)數(shù)字咧擂,技術(shù)及要使用一定的編碼方式進(jìn)行存儲(chǔ),原碼檀蹋、反碼松申、補(bǔ)碼是機(jī)器存儲(chǔ)一個(gè)具體數(shù)字編碼方式。

2.2 具體方式

原碼

符號(hào)位(首位)加上真值得絕對(duì)值俯逾。

int 12的原碼--->0000 0000 0000 0000 0000 0000 0000 1100(補(bǔ)全所有位)

int -12的原碼--->1000 0000 0000 0000 0000 0000 0000 1100

反碼

正數(shù)的反碼與原碼相同贸桶,負(fù)數(shù)的反碼是除符號(hào)位,其余位取反桌肴。

int 12的反碼--->0000 0000 0000 0000 0000 0000 0000 1100(補(bǔ)全所有位)

int -12的反碼--->1111 1111 1111 1111 1111 1111 1111 0011

補(bǔ)碼

正數(shù)的補(bǔ)碼與原碼相同皇筛,負(fù)數(shù)的補(bǔ)碼是反碼基礎(chǔ)上加1

int 12的反碼--->0000 0000 0000 0000 0000 0000 0000 1100(補(bǔ)全所有位)

int -12的反碼--->1111 1111 1111 1111 1111 1111 1111 0100

2.3 三種編碼方式各自的用處

<font size=4 color=red> 計(jì)算機(jī)只做加法運(yùn)算。</font>

  • 情景1:兩個(gè)正數(shù)進(jìn)行運(yùn)算坠七,原碼即可解決
10+2

1010 +
0010
_______________
1100----->(12)
  • 情景2:一正一負(fù)水醋,10+(-2),
//原碼
10+(-2)
 1010 +
 1010
_______________
10100----->(20)
//結(jié)果明顯是不對(duì)的,那就說(shuō)明負(fù)數(shù)與正數(shù)之間采用的不是原碼

//反碼
10+(-2)
  0000 0000 0000 0000 0000 0000 0000 1010 +
  1111 1111 1111 1111 1111 1111 1111 1110
_________________________________________
1 0000 0000 0000 0000 0000 0000 0000 1000
//我們發(fā)現(xiàn)彪置,好像除去符號(hào)位的話拄踪,結(jié)果是正確的。但是有一種情況還例外
10+(-10)
 0000 0000 0000 0000 0000 0000 0000 1010 +
 1111 1111 1111 1111 1111 1111 1111 0101
_________________________________________
 1111 1111 1111 1111 1111 1111 1111 1111--->1000 0000 0000 0000 0000 0000 0000 (原碼)
//除去符號(hào)位拳魁,好像結(jié)果出乎意料了啊惶桐,是-0。
//再試一下
1+(-1)

0001
1110 +
__________
1111 ----->1000(原碼)
//還是-0
//雖然人們理解上+0和-0是一樣的, 但是0帶符號(hào)是沒(méi)有任何意義的. 而且會(huì)有[0000 0000]原和[1000 0000]原兩個(gè)編碼表示0.

//于是補(bǔ)碼的出現(xiàn), 解決了0的符號(hào)以及兩個(gè)編碼的問(wèn)題:
1+(-1)
  0000 0000 0000 0000 0000 0000 0000 0001
  1111 1111 1111 1111 1111 1111 1111 1111 +
____________________________________________
1 0000 0000 0000 0000 0000 0000 0000 0000--->原碼(0000 0000 0000 0000 0000 0000 0000 0000)
//補(bǔ)碼
10+(-2)
  0000 0000 0000 0000 0000 0000 0000 1010 +
  1111 1111 1111 1111 1111 1111 1111 1110
_________________________________________
1 0000 0000 0000 0000 0000 0000 0000 1000
//首位的1,數(shù)據(jù)溢出了姚糊,系統(tǒng)自動(dòng)將其舍棄了想虎。所以結(jié)果是 1000(補(bǔ)碼)

//1000(補(bǔ)碼) 首位是1,說(shuō)明它是正數(shù)叛拷,正數(shù)的原碼,補(bǔ)碼相同岂却,其結(jié)果轉(zhuǎn)化為十進(jìn)制8忿薇。

總結(jié):根據(jù)以上的代碼,可以確定的話0的話只有+0躏哩,沒(méi)有-0署浩,所謂的0不帶符號(hào),其實(shí)就是把它包含進(jìn)了正數(shù)范圍去了扫尺。
這樣的話筋栋,假設(shè)我們現(xiàn)在的int是4Byte的,那么(10000 0000 0000 0000 0000 0000 0000 0000)其實(shí)是沒(méi)有反碼和原碼的正驻,因?yàn)槟愕谝晃槐硎痉?hào)弊攘,你根本無(wú)法減1,去轉(zhuǎn)換反碼姑曙。
-1-int的最大值(2^31-1)的補(bǔ)碼結(jié)果就是(10000 0000 0000 0000 0000 0000 0000 0000)襟交,因?yàn)閷?shí)際上是使用以前的-0的補(bǔ)碼來(lái)表示,所以沒(méi)有反碼和原碼的伤靠。
(10000 0000 0000 0000 0000 0000 0000 0000)其實(shí)就是(-2^31)捣域, 所以int的最小范圍就是這個(gè),而不是((-2^31)+1)宴合。

使用補(bǔ)碼焕梅,不僅解決了0的問(wèn)題,還能多表示一個(gè)最低數(shù)卦洽。

參考:

C++原碼贞言、反碼、補(bǔ)碼詳解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阀蒂,一起剝皮案震驚了整個(gè)濱河市蜗字,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脂新,老刑警劉巖挪捕,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異争便,居然都是意外死亡级零,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奏纪,“玉大人鉴嗤,你說(shuō)我怎么就攤上這事⌒虻鳎” “怎么了醉锅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)发绢。 經(jīng)常有香客問(wèn)我硬耍,道長(zhǎng),這世上最難降的妖魔是什么边酒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任经柴,我火速辦了婚禮,結(jié)果婚禮上墩朦,老公的妹妹穿的比我還像新娘坯认。我一直安慰自己,他們只是感情好氓涣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布牛哺。 她就那樣靜靜地躺著,像睡著了一般劳吠。 火紅的嫁衣襯著肌膚如雪荆隘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天赴背,我揣著相機(jī)與錄音椰拒,去河邊找鬼。 笑死凰荚,一個(gè)胖子當(dāng)著我的面吹牛燃观,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播便瑟,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缆毁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了到涂?” 一聲冷哼從身側(cè)響起脊框,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎践啄,沒(méi)想到半個(gè)月后浇雹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屿讽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年昭灵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烂完,死狀恐怖试疙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抠蚣,我是刑警寧澤祝旷,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站嘶窄,受9級(jí)特大地震影響怀跛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜护侮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望储耐。 院中可真熱鬧羊初,春花似錦、人聲如沸什湘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闽撤。三九已至得哆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哟旗,已是汗流浹背贩据。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闸餐,地道東北人饱亮。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舍沙,于是被迫代替她去往敵國(guó)和親近上。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1:ndk與jni的關(guān)系 JNI概念: JNI是 java native interface 拂铡,java本地接口壹无,...
    默默_大魔王閱讀 360評(píng)論 0 1
  • 1.編譯程序(1)gcc xx.c,他會(huì)默認(rèn)生成一個(gè)a.out的可執(zhí)行文件,在a.out所在目錄感帅,執(zhí)行./a.o...
    萌面大叔2閱讀 1,279評(píng)論 0 1
  • 1.編譯程序 (1)gcc xx.c,他會(huì)默認(rèn)生成一個(gè)a.out的可執(zhí)行文件斗锭,在a.out所在目錄,執(zhí)行./a....
    萌面大叔2閱讀 469評(píng)論 0 1
  • C語(yǔ)言基礎(chǔ) 編譯程序 gcc xx.c,他會(huì)默認(rèn)生成a.out的可執(zhí)行文件,在a.out所在目錄,執(zhí)行./a.ou...
    帥碧閱讀 629評(píng)論 1 3
  • 撒烏耳失球,圣經(jīng)故事里一個(gè)有污點(diǎn)的人物拒迅,沒(méi)人愿意用的一個(gè)名字。 亡,死亡璧微?消失作箍? 讀到100頁(yè)《離別的芬芳》,了解到林...
    菩妖妖閱讀 817評(píng)論 0 4