C語言基礎知識

2021-05-28 01:14:46 字數 726 閱讀 6375

1、+++的問題。      

int i =1;

int j =2;

int k = i+++j;

printf("%d" ,k);

輸出k為3。

編譯原理有關編譯器在詞法解析的時候,對於運算子,總是查詢最大的匹配也就是說,i+++j,編譯器在找到+的時候,它不立即理解為+而是繼續下乙個字元,下乙個字元仍然是+,可以組成++, 再往下的話便是+++,不成立了。所以i+++j會解析為(i++)+j 。另外i++是後自增,所以k=1+2=3,i再自增。++是所有的都算完了,再增加。

2、型別轉換

unsigned int a =6;

int b=-20;

char c;

(a+b>6)?(c=1):(c=0);

printf("%d" ,c);

unsigned int 型別的資料與 int 型別的資料相運算後,自動轉化為unsigned int型別。因此 a+b的值不是-14,而是乙個unsingned int 型別的數424967382。因此返回值為1。

3、a和b比較大小,不許用if、?:、switch 。

int max=(a + b + abs ( a-b ) ) /2

a和b交換:

方案1:

a=a+b

b=a-b

a=a-b

方案2:

a=a^b

b=a^b

a=a^b

C語言基礎知識

一 位元組對齊 位元組對齊的原因,是機器在訪問記憶體中儲存的資料的高效性。通常機器是機器位數為自然邊界來訪問記憶體的,如果乙個4位元組整形數,所在的記憶體不在虛擬記憶體的自然邊界。則cpu需要讀多於一次的資料,這樣就降低了效率。所以,簡單地說,就是保證cpu指令在訪問資料的時候,能一次讀取,而不需要...

C語言基礎知識

1.進製 1 基數 基數為n,代表n進製 2 位權 從個位開始,向左依次編號為0,1.x 分別代表n進 制的x次 3 八進位制以0開頭,十六進製制以0x開頭 4 x 進製轉 進製 按權求和 十進位制轉 x進製 連除倒取餘 2.基本資料型別 3.常量 程式執行期間值不能被改變的量 分為 整型常量,浮點...

c語言基礎知識

1 break 結束本次迴圈,不執行本次迴圈中break之後的語句,且結束該迴圈控制體 continue 意思是 中斷後 繼續 continue處結束本次迴圈,中止本次迴圈,不執行本次迴圈中continue之後的語句,但 中止後 沒有跳出該迴圈控制體,繼續執行本次迴圈之後的迴圈 共同點 都不會執行本...