如果想要準確的掌握每個操作符的作用,那么首先需要理解數(shù)據(jù)在計算機中的存儲和運算規(guī)則。
算數(shù)操作符就是我們常見的那幾種:
(+,-,*,/,%)
其實左移一位相當于變?yōu)樵瓉淼亩叮屑毾胍幌?,左移一位,那就是每個二進制位向前移動一個,相當于都成了一個2,所以數(shù)值上就變?yōu)樵瓉淼亩丁?以為規(guī)則:左邊拋棄,右邊補0
int num = 10;
其原反補碼為:
00000000000000000000000000001010
int num = -10;
其原碼為:
00000000000000000000000000001010
反碼為:
01111111111111111111111111111010
補碼為:
01111111111111111111111111111011
右移操作符>>移位規(guī)則:
int a = 0;
int b = 0
-----------------------------
& //按位與
a&b
兩個為1才為1,否則為0
-----------------------------
| //按位或
a|b
兩個為0才為0,否則為1
-----------------------------
^ //按位異或
a^b
相同為0,不同為1
-----------------------------
??他們的操作數(shù)必須都為為整數(shù)
五、賦值操作符int a = 0;
int b = 1;
a=b //意思為把b的值賦給a(支持連等,從右向左依次賦值)
# 六、復合賦值符
int x = 10;
x = x+10;//與下面等價
x +=10;//復合賦值符
! 邏輯反操作
- 負值
+ 正值
& 取地址
sizeof 操作數(shù)的類型長度(以字節(jié)為單位)
~ 對一個數(shù)的二進制按位取反
-- 前置、后置
++ 前置,后置
* 間接訪問操作符(解引用操作符)
(類型) 強制類型轉換
sizeof既是操作符又是關鍵字,用于計算所占內(nèi)存大小,單位為字節(jié),sizeof內(nèi)部的數(shù)據(jù)不進行運算
sizeof (),括號對于有的類型可以省略,有的類型不能省略
>>=<<=
!= //用于測試不相等
== //用于測試相等
注意 = 和 ==的區(qū)別
八、邏輯操作符&& //按位與
|| //邏輯或
注意區(qū)分邏輯與和按位與,邏輯或和按位或
1&2 = 0 // 1&&2 = 1
1| 2 = 3 // 1||2 = 1
注意:邏輯與和邏輯或在能夠判定出來后就不再計算后面的部分了
九、條件操作符條件操作符又稱三目操作符
表達式1(為判斷部分)?表達式2:表達式3
如果表達式1為真,則計算表達式2。
如果表達式1為假,則計算表達式3。
十、逗號表達式逗號表達式會從左向右依次計算,但是表達式的結果為最后一個表達式的結果。
十一、下標引用、函數(shù)調(diào)用和結構成員1.
[]下標引用操作符:數(shù)組名+索引值(也就是這樣[元素序列])
eg:arr[9] ,其中操作數(shù)為arr(數(shù)組名)和9(索引值)
2.
()函數(shù)調(diào)用操作符:被調(diào)函數(shù)名+要傳遞的參數(shù)(也就是這樣(a))
eg:test(a),其中操作數(shù)為test(被調(diào)函數(shù))和a(要傳的參數(shù))
3.
訪問一個結構成員: .或->. :結構體.成員名
->: 結構體指針->成員名
十二、表達式求值表達式求值的順序一部分是由操作符的優(yōu)先級和結合性決定。同樣,有些表達式的操作數(shù)在求職過程中可能需要轉換為其他類型。
C的整形算術運算總是至少以缺?。J)類型的精度來進行。
為了獲得這個精度,表達式中的字符和短整型的操作數(shù)在使用之前被轉換為普通整形,這種轉換稱為整型的提升。
整形提升的意義:
表達式的整形運算要在CPU的相應運算器件內(nèi)執(zhí)行,CPU內(nèi)整型運算器(ALU)的操作數(shù)的字節(jié)長度一般就是int的字節(jié)長度,同時也是CPU的通用寄存器的長度/
因此,即使兩個char類型的相加,在CPU執(zhí)行時實際上也要先轉換為CPU內(nèi)整形操作數(shù)的標準長度。
通用CPU時難以直接直線兩個8比特字節(jié)的直接相加運算(雖然機器指令中可能有這種字節(jié)相加指令)。所以,表達式中各種長度可能小于int長度的整型值,都必須先轉換為int或者unsigned int,然后才能送入CPU去執(zhí)行運算。
//char-->signed char
char a = 3;
//我們需要把3放入char類型中
//3的二進制為00000000000000000000000000000011
因為他是char類型(8比特位),所以儲存時發(fā)生截斷,把后八個二進制位儲存進去,即00000011
//char b = 127;
//00000000000000000000000001111111,放進去01111111
1. //如果我們直接打印a+b,結果為130
2. //如果我們先把a+b放入char c = a+b;然后打印整型c,結果為-126
整型提升是按照變量的數(shù)據(jù)類型的符號位來提升的,若是無符號類型,補的是0
2.算數(shù)轉換整型提升的驗證:如果我們定義一個char類型的變量c,我們直接sizeof(c),結果為1,但是如果我們加上一個正號或負號,結果就會變?yōu)?,因為有操作符就會發(fā)生運算,運算的話如果小于int類型就會發(fā)生整型提升。
如果某個操作符的各個操作數(shù)屬于不同的類型,那么除非其中一個操作數(shù)的轉換為另一個操作數(shù)的類型,否則操作就無法進行。就會發(fā)生類型轉換,下面的層次體系成為尋常算術轉換。
如果某個操作數(shù)的類型在上面這個列表排名較低,那么首先要轉換為另外一個操作數(shù)的類型后執(zhí)行運算。
復雜表達式的求值有三個影響因素:
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧