5.2 i++
5.3 程式設計風格
5.4 型別轉換
5.5 運算子問題
5.6 a、b交換與比較
5.7 c和c++的關係
因為變數定義即可見,int i = i 的操作並不會報錯 ,i是隨機值
int i = 1;
void main()
詳見:
注意:==返回狀態是0或者1。&和|是按位與和、或,返回值為具體計算後資料。&&和||是變數進行與、或,返回值為真假,是0或者1。
int main()
int count = 0;
while(x)
x = 9999, 轉化為2進製10 0111 0000 1111,8個1,因此count輸出為8
int i;
int a = 0;
for(i = 0; i < 10; i++)
執行順序為i = 0 ==> 判斷 i < 10(重要) ==> 執行迴圈內容 a++ ==> 執行i++ ==> 判斷i<10 ==> 執行迴圈內容 ==> i++ ==> i<10 …
printf倒是挺正常,記住從右往左執行就好。cout有坑
int arr = ;
printf("%d, %d\n", *ptr, *(++ptr))
輸出7,7
c++定義了一組內建型別之間的標準轉換,在必要的時候他們會被編譯器隱式的應用在物件上。
典型情況:
混合型別的算數表示式中
最寬的資料型別為目標轉換型別
用一種型別的表示式賦值給另一種型別
目標轉換型別為被賦值物件的型別
把乙個表示式傳遞給乙個函式,呼叫表示式的型別和形參型別不相同
轉化為形參型別
從乙個函式返回乙個表示式型別和返回型別不相同
轉換為函式返回型別
兩個轉換原則:
為防止精度損失,如果必要,型別總會被轉換為較寬的型別
如果有小於int的有序型別,都會被轉化為int
寬度比較:long double > double > float > long int > int > short int > char > bool
#includeusing namespace std;
// int i = 1;
int main()
cout << endl;
cout << b << endl; // ?
cout << (int)b << endl; // 250
printf("%d\n", b); // 250
printf("%c\n", b); // ?
return 0;
}
首先注意,c++對於算數表示式,在運算之前會將其中小於整型的型別都轉化成整型,其中char就是小於整型的,因此在運算前a會被轉化成int,佔4個位元組。
然後考慮運算子優先順序,~ 高於 + 高於 >>。
轉化為(unsigned char)(~(int)a)>>(4+1)
運算步驟:a轉int 0000 0000 0000 0000 0000 0000 1010 0101 ==> 進行~操作,結果 1111 1111 1111 1111 1111 1111 0101 1010 ==> 進行》5操作,得到 0000 0111 1111 1111 1111 1111 1111 1010 ==> 轉化成unsigned char,截斷後8位 1111 1010 ,轉換成unsigned int 就是250,轉化成字元是 「?」,不知道大於128的時候十進位制和ascii碼之間是怎麼轉化的,這裡沒仔細研究。
用乙個表示式,判斷乙個數x是否為2的n次方。
!(x&(x-1))
若數是2的n次方,則其二進位制中只有乙個1,x&(x-1)=0
下面**
int f(int x, int y)
x&y為x和y轉化為二進位制後相同位和的一半,(x^y)為x和y轉化為二進位制後不同位和,>>1是也取一半,則上面**為求得x和y的平均值
int sum(int a, int b)
轉化為二進位制加法運算,其運算可分為兩部分考慮,一部分是位和,一部分是進製。
位和運算 1 + 0 = 1, 0 + 1 = 1, 1 + 1 = 0, 0 + 0 = 0,符合異或運算規律
進製運算 1 + 1 = 1,其餘都是0,符合位與運算規律,因為進製是加給前一位的,因此位與運算後需要往前移動一位(a & b) << 1
當進製為0時,說明當前位和結果即為最終結果,遞迴結束。
bool fun(int a, int b)
int max(int a, int b)
針對整數
void swap(int &a, int &b)
針對浮點數,採用記憶體交換
#define swap(a, b) \
為什麼在c++程式中用c編譯器編譯出來的函式要加extern c
答:c中沒有過載概念,在c中某函式原型為void foo(int x, int y)被c編譯器編譯後在庫中名字是_foo,被c++編譯器編譯完後期名字為_foo_int_int。extern c解決名字匹配問題。
防止標頭檔案被重複引用,或者防止重複定義(變數,巨集或者結構)
c語言為面向過程的結構化語言,c++在c基礎上擴充套件了物件導向的部分。c語言程式設計,首次考慮如何通過乙個過程,對輸入進行計算處理得到輸出。c++程式設計,首先考慮如何構造乙個物件模型,讓這個模型能夠契合與之相應的問題域。這樣就可以通過獲取物件的狀態資訊獲取得到輸出或實現過程控制。
程式設計師面試寶典 第1 8章
ptr 12 應為 ptr ptr 12 ptr printf d,d n a,b printf的引數是從右向左計算。運算子優先順序 int a 相當於將變數a所在位址開始的sizeof int 個位元組當成int型的資料輸出。如果乙個運算元是long型,乙個是unsigned int型,那麼只有機...
程式設計師面試寶典
據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...
Java程式設計師面試寶典筆記
第六章1.變數必須先初始化後才能使用。2.byte short 和char 型別的運算操作首先會把這些值轉換為int 型別,然後對int 型別進行運算,最後得到int 型別的結果。3.靜態方法裡只能呼叫靜態方法 包括main 方法 4.main 方法必須加public 修飾,如果不加則預設為prot...