操作符可以分為以下幾類:
+ - * / %
1、除了%d操作符之外,其他幾個操作符可以用於整數和浮點數。
2、對於/操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。
3、%操作符的兩個運算元必須為整數。返回的是整出之後的餘數。
《左移操作符
移位規則:左邊拋棄,右邊補0
int num=10;
00000000 00000000 00000000 00001010 num在記憶體中的二進位制
00000000 00000000 00000000 00010100 num左移一位產生的結果
num<<1 但實際上num在沒有被賦值的情況下,自身的值不會變化
eg:int main()
結果為:a=1,b=2
用二進位制序列表示為:
a: 00000000 00000000 00000000 00000001
b: 00000000 00000000 00000000 00000010
>>右移操作符
移位規則:
右移運算分兩種:
int num=-1;
假設num是-1;
這樣記憶體中儲存-1的補碼為32個全1
11111111 11111111 11111111 11111111
算數右移:左邊用原該值的符號位填充
11111111 11111111 11111111 11111111
由於是負數所以符號位為1,即左邊補1
邏輯右移:左邊補0
011111111 11111111 11111111 11111111
1、邏輯移位: 左邊用0填充,右邊丟棄
int num=10;
00000000 00000000 00000000 00001010 num在記憶體中的二進位制
00000000 00000000 00000000 00010100 num左移一位產生的結果
num<<1 但實際上num在沒有被賦值的情況下,自身的值不會變化
eg:int main()
結果為:a=2,b=1
用二進位制序列表示為:
a: 00000000 00000000 00000000 00000010
b: 00000000 00000000 00000000 00000001
2、算術移位:左邊用原該值的符號位填充,右邊丟棄
eg:
int main()
結果為:a=-1;b-1;
警告 :對於移位運算子,不要移動負數字,這是標準為定義的。
eg:int sum=10;
num>>-1;//error
&//按位與
| //按位或
^按位異或
注:他們的運算元必須是整數。
eg:
int main()
結果為:a=-1;b-1;
一道**的面試題:不能建立臨時變數(第三個變數),實現兩個數的交換。
eg:
int main()
結果為:a=-1;b-1;
#includeint main()
賦值操作符是乙個很棒的操作符,他可以讓你得到乙個之前你不滿意的值。也就是可以給自己重新賦值。 i
nt weight=120;//體重
weight=89;//不滿意就賦值
double salary=10000.0;
salary=200000.0;//使用賦值操作符賦值。
賦值操作符可以連續使用,比如:
int a=10;
int x=20;
int y=20;
a=x=y+1;//連續賦值
但是:x=y+1;
a=x;
這樣的寫法更加清晰有條理,而且易於除錯。
復合賦值符:+= -= *= /= %= >>= <<= &= |= ^=
這些運算子,都可以寫成復合的效果。
eg:
int x=10;
x=x+10;
x+=10;//復合賦值
//這樣寫會使我們的**更加簡潔。
! //邏輯反操作
- //負值
+ //正值
& //取位址
sizeof //運算元的型別長度(以位元組為單位)
~ //對乙個數的二進位制按位取反
-- 前置、後置--
++ 前置、後置++
* 間接訪問操作符(解引用操作符)
(型別) 強制型別轉換
int arr[10]=
printf("%d\n",sizeof(arr))://40 陣列名單獨放在sizeof內部,陣列名表示整個陣列
printf("%d\n",sizeof(arr+0))://4 arr+0:表示的是陣列首元素的位址
&陣列名——陣列名表示整個陣列 &arr+1=+40
放在sizeof內部的表示式不參與運算(sizeof求表示式在編譯期間,一般表示式在執行期間運算)
eg:int a=1;
short s=3;
sizeof(s=a+5);
結果為:a=1;s=3;
int a=0;
~a;結果為:a=-1
eg:
#includeint main()
eg:
#includeint main()
eg:
#includeint main()
)
eg:
int a=10;
a=(int)3.14
關係操作符
>
>=
<
<=
!= (用於測試「不相等」)
== (用於測試「相等」)
警告:在程式設計中==和=容易寫錯
邏輯操作符
&& 邏輯與
|| 邏輯或
區分邏輯與與按位與
區分邏輯或和按位或
1&2------->0
1&&2----->1
1|2--------->3
1||2-------->1
eg:
#includeint main()
exp1,exp2,exp3,..expn
逗號表示式,就是用逗號隔開的多個表示式。
逗號表示式從左向右依次執行。整個表示式的結果是最後乙個表示式的結果。
int a=1;
int b=2;
int c=(a>b,a=b+10,ab=a+1);//逗號表示式
c=2
1、[ ]
運算元:乙個陣列名+乙個索引值
int arr[ 10];//建立陣列
arr[9]=10;//實用下標引用操作符
[ ]的運算元是arr和9
int main()
;arr[5]=5;=*(arr+5)=5;
2、()
函式呼叫操作符(函式名也是乙個操作符,是函式所在位址)
接受乙個或者多個運算元:第乙個運算元是函式名,剩餘運算元是傳遞給函式的引數。
3、訪問乙個結構的成員
結構體.成員名
->結構體指標-.成員名
#include
struct stu
c語言操作符 位操作符 移位操作符
1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...
C語言 , 操作符
例如 define to string s s 將會使編譯器把以下命令 cout to string hello world endl 理解為cout hello world endl 例如 define concatenate x,y x y int xy 10 將會使編譯器把 cout conc...
C語言操作符
操作符的分類 1 算術操作符 2 移位操作符 3 位操作符 4 賦值操作符 5 單目操作符 6 關係操作符 7 邏輯操作符 8 條件操作符 9 逗號表示式 1 算術操作符 1 除了 操作符之外,不能用於浮點數。2 對於 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。...