- 文章目錄
- ??算術操作符
- ??移位操作符
- ??位操作符
- ??賦值操作符
- ??單目操作符
- ??關系操作符
- ??邏輯操作符
??算術操作符
加( + ) 減( - )乘( * )除( / ) 取模( % )
算術操作符是我們日常用的最多的,也是大家最熟悉不過的。
??要注意以下幾點
1. 除了 % 操作符之外,其他的幾個操作符可以作用于整數和浮點數。
2. 對于 / 操作符如果兩個操作數都為整數,執(zhí)行整數除法。而只要有浮點數執(zhí)行的就是浮點數除法。
3. % 操作符的兩個操作數必須為整數。返回的是整除之后的余數。
典型錯誤
??移位操作符
移位操作符分左移和右移
<< 左移操作符
>> 右移操作符_
??注:移位操作符的操作數只能是整數。而且是針對二進制補碼進行移動
1.左移操作符
它的移位規(guī)則:
左邊拋棄、右邊補0
2.右移操作符
移位規(guī)則:
首先右移運算分兩種:
1. 邏輯移位
左邊用0填充,右邊丟棄2. 算術移位
左邊用原該值的符號位填充,右邊丟棄
那計算機采用的是邏輯移位,還是算術移位呢???
正確答案是取決于編譯器,不過大部分編譯器的是采用算術移位,因為這樣意義才大??!
先補充一些計算機存儲數據的知識
在計算機中存儲數據是按二進制的補碼進行存儲的
補碼的轉換公式=原碼取反加一!
正數的原碼反碼補碼是一樣的?。。。。?!
假設編譯器是邏輯移位
正數右移
負數右移
所以說,只有當右移位算術移位才有實際意義,比如我們上面把-4右移,其實就是讓它除2,變成-2,而邏輯右移則將這個數變成一個非常大的正數,那它的意義何在呢? |
??位操作符
位操作符有:
& -------- 按位與
| --------- 按位或
^ -------- 按位異或
??注:他們的操作數必須是整數。
通過一些練習題來理解它是最好不過的方法!
#include <stdio.h>
int main()
{
int num1 = 1;
int num2 = 2;
int a=num1& num2;
int b=num1 | num2;
int c=num1^ num2;
printf("a=%d b=%d c=%d", a, c, b);
return 0;
}
上面結果:a=0,b=3,c=3
解釋如下
有個小結論:任何數與0異或等于任何數,比如10^0=10
任何數與自己異或等于0,比如10^10=0
而且它們滿足交換律,比如10^ 4 ^ 10= 10^ 10 ^4=0 ^ 4=4
至于為什么是這樣,其實跟上面圖的num1^num2一樣的分析方法,自己可以嘗試畫一下圖理解,有了這個結論就可以做一下下面這道面試題
曾經有一道變態(tài)面試
不能創(chuàng)建臨時變量(第三個變量),實現兩個數的交換。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("交換前a = %d b = %d\n", a, b);//
a = a ^ b; // 其實就是a=10^20,先不用算結果
b = a ^ b; //然后現在b=a^b=10^20^20,所以就變成b=10^0=10
a = a ^ b; //這里就是a= 10 ^ 20 ^ b = 10 ^ 20 ^ 10
//用交換律就等于10 ^ 10 ^ 20 = 0 ^ 20 = 20
printf("交換后a = %d b = %d\n", a, b);//這樣兩個數就交換過來了
return 0;
}
??賦值操作符
賦值操作符是一個很棒的操作符,他可以讓你得到一個你之前不滿意的值。也就是你可以給自己重新賦值。
我們創(chuàng)建變量并賦值叫初始化,而后面才叫賦值
復合賦值符
+=
–=
*=
/=
%=
>>=
<<=
&=
|=
^=
上面的都像下圖一樣等價比如a*=2 等價于a=a*2
??單目操作符
! ------------ 邏輯反操作
- ------------ 負值
+ ----------- 正值
& ------------取地址
sizeof ------操作數的類型長度(以字節(jié)為單位)
~ ------------ 對一個數的二進制按位取反
– ------------前置、后置–
++ ----------前置、后置++
* ------------ 間接訪問操作符(解引用操作符)
(類型) ------ 強制類型轉換
主要要注意的是前置和后置的區(qū)別
??關系操作符
>
>=
<
<=
!= ----------- 用于測試“不相等”
== ---------- 用于測試“相等”
關系操作符比較簡單,最主要的就是下面這個
警告:
在編程的過程中== 和=不小心寫錯,導致的錯誤
??邏輯操作符
&& ------------ 邏輯與
|| --------------- 邏輯或
注意:
區(qū)分邏輯與和按位與
區(qū)分邏輯或和按位或
1&2----->0--------按位與
1&&2---->1-------邏輯與 兩邊的數為真,表達式就為真
1|2----->3---------按位或
1||2---->1----------邏輯或 其中一方為真,則表達式為真
邏輯操作符常常用于條件判斷語句,比如想判斷一個是是否大于100,并且小于200
邏輯操作符還有一個最重要的點就是‘“短路”
用一道題理解
一道360筆試題文章來源:http://www.zghlxwxcb.cn/news/detail-415584.html
#include <stdio.h>
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
//程序輸出的結果是什么?
a=1,b=2,c=3,d=4
根據短路原則,只有a++運算了,其余沒有進行運算文章來源地址http://www.zghlxwxcb.cn/news/detail-415584.html
到了這里,關于【一篇文章帶你重溫重點】C語言操作符的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!