1、== 是判斷相等的符號,但是有的時候會不慎寫成=,這個時候編譯的時候不會報錯,但是這個語句就不會形成約束條件,這個條件下的語句會無條件執行。所以一般將數字寫在左邊,表示式寫在右邊,這樣萬一寫錯的話就會報錯。
2、&&是短路與,一旦前面的表示式錯了,就不會執行後面的表示式。
3、||是短路或,一旦前面的表示式對了,就不會執行後面的表示式。
如
int i = 0;
int j = 0;
if((++i) < 0 && (j++) > 0)
printf("%d,%d\n" , i, j);
//列印結果為i = 1, j = 0;
int num = 5;
if(!num)
else
printf("b");
//這個函式的意義是 0列印a,非0列印b
常量是有符號數,當他和無符號數進行運算的時候,結果會變成有符號數,所以要給常量進行無符號強制轉化。如unsigned int
掩碼是用來方便位操作(與,或,抑或,左移,右移)的,因為可以與數的機器數進行相與等位操作,得到數字。
//想要依次得到數字。可以向右移,然後與掩碼1相與,也可以向左移,與十六進製制的0x80000000相與,此時如果用二進位制的,系統可能識別不了。
//掩碼mask的獲得方法(例如想得到右邊開始m位到n位的值):
//將0這個數的二進位制數取反,然後向右移32-(n-m+1)位,再向左移m位,(注意轉換無符號數)
(unsigned
int)~(unsigned
int)0>>(32-(n-m+1))//有符號數左移用0補齊,而右移用符號位補齊,所以要強制轉換成無符號數。
(1)清0特定位(mask中特定位置0,其他位為1,s = s & mask)
(2)取某位中的指定位(mask特定位置1,其他位為0,s = s & mask)
將特定位置1,而其他位不變
(1)不使用中間變數而交換兩數
(2)將特定位取反(mask特定位置1,s = s & mask)
//交換兩數而不使用中間變數
//抑或的方法
a = a ^ b;
b = a ^ b;
a = a ^ b;
//加法的方法
a = a + b;
b = a - b;
a = a - b;
//但是他的缺點就是可能會溢位
//乘法的方法
//缺點是不能交換0
(表示式)?(結果1):(結果2);
//根據表示式進行判斷,如果表示式是對的,就執行結果1,否則就是結果2
C語言 運算子與 運算子
我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...
C語言 運算子和 運算子
變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...
C語言運算子
1級優先順序左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 字尾增量運算子 字尾增量運算子 2級優先順序右結合 邏輯非運算子 按位取反運算子 字首增量運算子 字首增量運算子 負號運算子 型別 型別轉換運算子 指標運算子 位址與運算子 sizeof 長度運算子 3級優先順序左結合 ...