point on C 5 操作符和表示式

2021-07-05 15:16:12 字數 1608 閱讀 6000

第四章操作符和表示式

4.1操作符(運算子)

4.1.1算術操作符

/的兩個運算元都是整數時,執行整除運算,其他情況下執行浮點除法。

%的兩個運算元必須都是整數,取餘。

4.1.2移位操作符

《左移操作符,不管邏輯移位還是算術移位都

0!

>>右移操作符,邏輯移位時

0,算術移位根據原先該值的符號位來補1或

0

4.1.3位操作

&與  |或  ^異或  ~按位取反

value&= ~(1賦值是表示式的一種,而不是某種型別的語句。所以,只要允許出現表示式的地方,都能進行賦值。表示式都具有乙個值,賦值表示式的值就是左運算元的新值!

警告:1.進行賦值運算時要注意運算元的變數型別:a= b + c;有可能因為型別不一樣而發生截斷!

2.char ch;

while(( ch = getchar() ) != eof)….

eof需要的位數比字元型值提供的位數多,getchar()

的返回值也是乙個整形值,而不是字元值的原因!

在該程式中,getchar()把返回值首先儲存於ch中將導致它被截短,然後再整形提公升與eof進行比較。

復合賦值符

優勢:容易書寫和維護

4.1.5單目操作符

!  ++ -  &  sizeof

^  -- +  *  (型別)

!:邏輯取反

^:按位取反

sizeof:運算元可以是變數、資料型別、陣列名、表示式,返回數以位元組為基本單位。

注意:因為判斷長度不需要對表示式求值,所以類似sizeof(a=b+1)沒有向a賦值

++和--:分為字首和字尾形式,要求運算元必須是乙個「左值」。

字首形式的++操作符出現在運算元的前面,運算元的值被增加,而表示式的值就是運算元增加後的值。

字尾形式的++操作符出現在運算元的後面,運算元的值仍被增加,但表示式的值是運算元增加前的值。

抽象地說,字首和字尾形式的增值操作符都複製乙份變數值的拷貝,用於賦值操作

字首操作符在拷貝之前,先增值。

字尾操作符在拷貝之後,在增值。

字首和字尾操作符的結果不是被它們所修改的變數,而是變數的拷貝!

4.1.6關係操作符

結果都是乙個整形值,不是布林型。如果兩端的運算元符合操作符指定的關係,表示式的結果即是1,不符合則是0。

4.1.7邏輯操作符

&& 和  ||

注意它們都有「短路求值」short-circuited evaluation

例:if ( x>=0 && x< max && array[x] == 0)//先檢查陣列的下表是否在合法範圍之內。

4.1.8條件操作符

expression1? expression2 : expressionx3;

5 表示式和操作符

下面的準則要牢記 有的時候覺得這個規則蠻麻煩的 1 如果左右兩邊是同乙個物件的reference,那麼返回true。這種情況都是false var now new date var arr1 now var arr2 now arr1 arr2 false 2 如果左右兩邊是數字,那麼它們的值相等就...

第5章 操作符和表示式

移位操作只是簡單地把乙個值的位向左或向右移動。在左移位中,值最左邊的幾位被丟棄,右邊多出來的幾個空位則由0補齊。右移位操作存在乙個左移位操作不曾面臨的問題 從左邊移入新位時,可以選擇兩種方案。一種是邏輯移位,左邊移入的位用0填充 另一種是算術移位,左邊移入的位由原先該值的符號位決定,符號位為1則移入...

操作符和表示式

一.操作符 1.算術操作符 除了 之外其餘的幾個操作符既可以用於計算整型也可以用於計算浮點型資料,只能計算整型資料,得到的結果是餘數 2.移位操作符 右移位操作符 左移時,值最左邊的幾位被丟棄,右邊多出來的幾個空位由0補齊。右移時,從左邊移入新位有兩種方式。一種方案是邏輯移位,左邊移入的數由0填齊 ...