程式設計師面試寶典學習筆記 第5章 程式設計基本概念

2021-10-24 02:30:49 字數 3058 閱讀 9180

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...