1. 程式人生 > >“C語言操作符”

“C語言操作符”

操作符

算數操作符:+ - * / % 加減乘除為基本操作,%為取模;/ 和 %的區別是:/為取商,%為取餘數;%只用於兩個整數。/在運算時,兩個數都為整型是進行整型除法,只要有一個浮點型,就進行浮點型除法。
移位操作符:<<左移操作符,>>右移操作符;
左移操作符移位規則:左移表示2進位制數的32個bit位向左移動一位,左邊丟掉,右邊補0

int num = 10;
	num = num << 1;

如上:num所表示的2進位制數為00000000000000000000000000001010 (10)
num左移一位的結果為 00000000000000000000000000010100 (20)
右移操作符移位規則:
1.邏輯右移:左邊用0填充,右邊捨棄
2.算數右移:左邊用原符號位填充,右邊捨棄

int num = -1;
	num = num>>1;

原num所表示的2進位制數的補碼:11111111111111111111111111111111
邏輯右移後的2進位制數的補碼為:01111111111111111111111111111111
可以發現邏輯右移後的符號發生變化。
算數右移後的2進位制數的補碼為:11111111111111111111111111111111
右邊捨棄一個1,右邊因為符號為-,所以用1表示,補一個1

int num = 10;
num >> -1;  //error

移位運算中,不要移動負數位,這是標準未定義的

位操作符


& 按位與
| 按位或
^ 按位異或
注意:它們的運算元必須為整數。
賦值操作符:=
可以賦值一個常量或常量表達式

int a = 10
int b = a + 1;

複合賦值符:
+=、*=、/=、%=、>>=、<<=、&=、|=、^=
單目操作符
! 邏輯反操作符(非) - 負值 + 正值
& 取地址
sizeof運算元的型別長度(以位元組為單位)
~對一個二進位制數取反
– 前置後置–
++ 前置後置++
*間接訪問操作符(解引用操作符)
(型別) 強制型別轉換
關係操作符

=、<=、>、<、
!= (用於測試“不相等”)
==(用於測試“相等”)

注意:=與==的用法,容易導致程式的結果錯誤

邏輯操作符
&& 邏輯與 兩個條件都滿足為真
|| 邏輯或 兩個條件滿足1個為真

條件操作符
exp1?exp2 : exp3

eg:(a>5)?3:-3

逗號表示式
exp1,exp2,exp3…expn
逗號表示式就是用逗號隔開的多個表示式。逗號表示式從左向右依次執行。整個表示式的結果是最後一個表示式的結果。
下標引用、函式呼叫和結構成員
1.[]下標引用操作符
運算元:一個數組名+一個索引值

int arr[10];
arr[9] = 10;

[]的兩個運算元是arr和9。
2.()函式呼叫操作符,接收一個或者多個運算元:第一個運算元是函式名,剩餘的操作符就是傳遞給函式的引數。

#include <stdio.h>
void test1()
{
	printf("%s\n",*str);
}
int main()
{
	test1("hello world!");
	return 0;
}

3.訪問一個結構的成員
. 結構體.成員名 ->結構體指標->成員名
操作符的屬性
複雜表示式的求值有三個影響的因素。
1.操作符的優先順序
2.操作符的結合性
3.是否控制求值順序
兩個相鄰的操作符先操作優先順序高的,如果優先順序相同,取決於它們的結合性。(不一定能準確判斷出值)

總結:如果寫出的表示式如果不能通過操作符的屬性確定唯一的計算路徑,那這個表示式就是存在問題的。