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之後的語句,但 中止後 沒有跳出該迴圈控制體,繼續執行本次迴圈之後的迴圈 共同點 都不會執行本...