目錄
1.乙個程式從編寫到最後得到執行結果要經歷以下一些步驟
2.數值型別
2.1 整數型別
2.2 原碼補碼及反碼
2.3 移位
2.3.1 左移
2.3.2 右移
2.4 進製表示
2.5 表示式中各資料型別混合計算
編譯:為了使計算機能執行高階語言源程式,必須先用complier的軟體,也稱編譯程式或
編譯系統),把源程式翻譯成二進位制形式的「目標程式」,生成.obj檔案或者.o檔案
作用:進行語法檢查和此法檢查
連線:在改正所有的錯誤並全部通過編譯後,得到乙個或多個目標檔案。此時要用系統提供的「連線程式(
linker)」將乙個程式的所有目標程式和系統的庫檔案以及系統提供的其他資訊連線起來,最終形成乙個可執行的二進位制檔案,它的字尾是.exe,是可以直接執行的。
在整數型別中,是以補碼形式儲存的。
1.可以看到正數的原碼 與 其反碼補碼相同
2.負數的原碼最高位為1
3.負數的反碼: 符號位不變,其餘各位按位取反
4.負數的補碼:在其反碼的基礎上+1
5.0的補碼為0000,0000,-128為1000,0000
規則:
右邊空出的位用0填補
高位左移溢位則捨棄該高位。
計算機中常用補碼表示資料:
資料 127,補碼和原碼一樣:0111 1111。
左移一位: 1111 1110 -> 這個補碼對應的原碼為:1000 0010 對應十進位制:-2
左移二位: 1111 1100 -> 這個補碼對應的原碼為:1000 0100 對應十進位制:-4
左移三位: 1111 1000 -> 這個補碼對應的原碼為:1000 1000 對應十進位制:-8
左移四位: 1111 0000 -> 這個補碼對應的原碼為:1001 0000 對應十進位制:-16
左移五位: 1110 0000 -> 這個補碼對應的原碼為:1010 0000 對應十進位制:-32
左移六位: 1100 0000 -> 這個補碼對應的原碼為:1100 0000 對應十進位制:-64
左移七位: 1000 0000 -> 這個補碼對應的原碼為:1000 0000 對應十進位制:-128
左移八位: 0000 0000 -> 這個補碼對應的原碼為:0000 0000 對應十進位制:0
注:原碼到補碼的計算方式:取反+1,
補碼到原碼的計算方式:-1再取反。
資料-1,它的原碼為1000 0001,補碼為1111 1111
左移一位: 1111 1110 -> 這個補碼對應的原碼為:1000 0010 對應十進位制:-2
左移二位: 1111 1100 -> 這個補碼對應的原碼為:1000 0100 對應十進位制:-4
左移三位: 1111 1000 -> 這個補碼對應的原碼為:1000 1000 對應十進位制:-8
左移四位: 1111 0000 -> 這個補碼對應的原碼為:1001 0000 對應十進位制:-16
左移五位: 1110 0000 -> 這個補碼對應的原碼為:1010 0000 對應十進位制:-32
左移六位: 1100 0000 -> 這個補碼對應的原碼為:1100 0000 對應十進位制:-64
左移七位: 1000 0000 -> 這個補碼對應的原碼為:1000 0000 對應十進位制:-128
左移八位: 0000 0000 -> 這個補碼對應的原碼為:0000 0000 對應十進位制:0
可以看出127和-1的結果完全一樣。移位操作與正負數無關,它只是忠實的將所有位進行移動,補0,捨棄操作。
規則:
左邊空出的位用0或者1填補。正數用0填補,負數用1填補。注:不同的環境填補方式可能不同;
低位右移溢位則捨棄該位。
1、127的補碼:0111 1111
右移一位: 0011 1111 -> 原碼同補碼一樣 對應十進位制:63
右移二位: 0001 1111 -> 原碼同補碼一樣 對應十進位制:31
右移三位: 0000 1111 -> 原碼同補碼一樣 對應十進位制:15
右移四位: 0000 0111 -> 原碼同補碼一樣 對應十進位制:7
右移五位: 0000 0011 -> 原碼同補碼一樣 對應十進位制:3
右移六位: 0000 0001 -> 原碼同補碼一樣 對應十進位制:1
右移七位: 0000 0000 -> 原碼同補碼一樣 對應十進位制:0
右移八位: 0000 0000 -> 原碼同補碼一樣 對應十進位制:0
2、-128的補碼:1000 0000
右移一位: 1100 0000 -> 這個補碼對應的原碼為:1100 0000 對應十進位制:-64
右移二位: 1110 0000 -> 這個補碼對應的原碼為:1010 0000 對應十進位制:-32
右移三位: 1111 0000 -> 這個補碼對應的原碼為:1001 0000 對應十進位制:-16
右移四位: 1111 1000 -> 這個補碼對應的原碼為:1000 1000 對應十進位制:-8
右移五位: 1111 1100 -> 這個補碼對應的原碼為:1000 0100 對應十進位制:-4
右移六位: 1111 1110 -> 這個補碼對應的原碼為:1000 0010 對應十進位制:-2
右移七位: 1111 1111 -> 這個補碼對應的原碼為:1000 0001 對應十進位制:-1
右移八位: 1111 1111 -> 這個補碼對應的原碼為:1000 0001 對應十進位制:-1
常見應用
左移相當於*2,只是要注意邊界問題。如char a = 65; a<<1 按照*2來算為130;但有符號char的取值範圍-128~127,已經越界,多超出了3個數值,所以從-128算起的第三個數值-126才是a<<1的正確結果。
而右移相當於除以2,只是要注意移位比較多的時候結果會趨近去乙個非常小的數,如上面結果中的-1,0。
十進位制:正常書寫 ;其中長整形後加l或者l,321l
八進位制:常數開頭加數字0;
十六進製制:常數開頭加數字0和字母x
c 程式設計 譚浩強編 菜鳥學習筆記(一)
本人交大在讀研二狗,以前幾乎沒有任何程式設計經驗 本科時學過c語言,69分 但複習三天譚浩強的c語言程式設計就在計算機二級考試中得了優,故有點盲目自信 發誓要在半個月c 入門,能夠一窺c 的奧妙。主要學習工具與書籍 visual studio 2008 vassistx c 程式設計 譚浩強編 孫鑫...
譚浩強《C 程式設計》學習篇 虛函式
譚浩強 c 程式設計 學習篇 虛函式 一 定義 定義 在某基類中宣告為 virtual 並在乙個或多個派生類中被重新定義的成員函式。語法 virtual 函式返回型別函式名 參數列 用途 實現多型性,通過指向派生類的基類指標,訪問派生類中同名覆蓋成員函式 虛函式必須是基類的非靜態成員函式,其訪問許可...
譚浩強C 程式設計 學習小結(重要知識點)
1.函式呼叫應在函式宣告之後,函式宣告可在main上面,也可在main內部,或者在標頭檔案裡?2.c語言標頭檔案以.h結尾,新的ansi c 推出的編譯系統不帶.h,c 保持相容,可並存。3.c語言無命名空間,因此無需作using namespace說明 4.c語言中,main函式無返回值 void...