運算子是每一種程式語言中必備的符號,如果沒有運算子,那麼程式語言將無法實現任何運算。
運算子主要用於執行程式**運算,例如加法、減法、大於、小於等。
下面我們將介紹算術運算子、邏輯運算子、比較運算子、三元運算子以及運算子的優先順序。
算術運算子
算術運算子是最常用的一類運算子,包括加法、減法、乘法、除法等,
具體的表示符號如下表所示。
運算子說明
對兩個運算元做加法運算
對兩個運算元做減法運算
對兩個運算元做乘法運算
對兩個運算元做除法運算
對兩個運算元做取餘運算
這裡需要強調的是:
當對兩個字串型別的值使用+運算子,代表的是兩個字串值的連線,例如"123"+"456"的結果為"23456"。
當使用/運算子時也要注意運算元的資料型別,如果兩個運算元的資料型別都為整數,那麼結果相當於取整運算,不包括餘數;而兩個運算元中如果有乙個運算元的資料型別為浮點數,那麼結果則是正常的除法運算。
當使用%運算子時,如果兩個操作都為整數,那麼結果相當於取餘數。經常使用該運算子來判斷某個數是否能被其他的數整除。
【例項1】使用/和%運算子來取得數字1234中的千位、百位、十位、個位的值。
根據題目要求,**如下。
classprogram}
執行上面的**,效果如下圖所示。
從上面的執行效果可以看出,在運算元中只要有乙個值是字串型別的,+運算子起到的作用就是連線,而不是相加運算。
邏輯運算子
邏輯運算子主要包括與、或、非等,它主要用於多個布林型表示式之間的運算。
具體的表示符號如下表所示。
運算子含義
說明邏輯與
如果運算子兩邊都為true,則整個表示式為true,否則為false;如果左邊運算元為false,則不對右邊表示式進行計算,相當於「且」的含義
邏輯或如果運算子兩邊有乙個或兩個為true,整個表示式為true,否則為false;如果左邊為true,則不對右邊表示式進行計算,相當於「或」的含義
邏輯非表示和原來的邏輯相反的邏輯
在使用邏輯運算子時需要注意邏輯運算子兩邊的表示式返回的結果都必須是布林型的。
【例項2】判斷2023年是否為閏年。
根據題目要求,閏年的判斷是需要滿足兩個條件中的乙個,乙個是年份能被4整數但是不能被100整數,乙個是能被400整除。**如下。
classprogram}
執行上面**結果如下圖所示。
從上面的執行效果可以看出,2023年不是閏年。此外,在例項的判斷表示式中要注意括號的使用,括號可以改變表示式中運算的優先順序。
比較運算子
比較運算子是在條件判斷中經常使用的一類運算子,包括大於、小於、不等於、大於等於、小於等於等,具體的符號說明如下表所示。
運算子說 明
表示兩邊表示式運算的結果相等,注意是兩個等號
表示兩邊表示式運算的結果不相等
表示左邊表示式的值大於右邊表示式的值
表示左邊表示式的值小於右邊表示式的值
表示左邊表示式的值大於等於右邊表示式的值
表示左邊表示式的值小於等於右邊表示式的值
使用比較運算子運算得到的結果是布林型的值,因此經常將使用比較運算子的表示式用到邏輯運算子的運算中。
【例項3】判斷10是否為偶數。
根據題目要求,判斷某乙個數是否為偶數,實際上就是判斷該數是否能被2整除,如果被2整除後餘數為0,則說明該數為偶數。**如下。
classprogram}
執行上面**,效果如下圖所示。
位運算子
所謂的位運算,通常是指將數值型的值從十進位制轉換成二進位制後的運算,由於是對二進位制數進行運算,所以使用位運算子對運算元進行運算的速度稍快。
位運算包括與、或、非、左移、右移等,具體的表示符號如下表所示。
運算子說明
按位與。兩個運算數都為1,則整個表示式為1,否則為0;也可以對布林型的值進行比較,相當於「與」運算,但不是短路運算
按位或。兩個運算數都為0,則整個表示式為0,否則為1;也可以對布林型的值進行比較,相當於「或」運算,但不是短路運算
按位非。當被運算的值為1時,運算結果為0;當被運算的值為0時,運算結果為1。該操作符不能用於布林型。對正整數取反,則在原來的數上加1,然後取負數;對負整數取反,則在原來的數上加1,然後取絕對值
按位異或。只有運算的兩位不同結果才為1,否則為0
左移。把運算子左邊的運算元向左移動運算子右邊指定的位數,右邊因移動空出的部分補0
有符號右移。把運算子左邊的運算元向右移動運算子右邊指定的位數。如果是正值,左側因移動空出的部分補0;如果是負值,左側因移動空出的部分補1
無符號右移。和》的移動方式一樣,只是不管正負,因移動空出的部分都補0
在上面列出的運算子中比較常用的是左移運算子和右移運算子,左移1位相當於將運算元乘2,右移1位相當於將運算元除2。
【例項4】使用位運算子計算2的立方。
根據題目要求,計算2的立方就是將2向左移兩位得到的結果,**如下。
classprogram}
執行上面**,效果如下圖。
三元運算子
三元運算子也被稱為條件運算子,與後面要學習的if條件語句非常類似。
在c#語言中三元運算子只有乙個,具體的語法形式如下。布林表示式?表示式1:表示式2
其中:布林表示式:判斷條件,它是乙個結果為布林型值的表示式。
表示式1:如果布林表示式的值為true,該三元運算子得到的結果就是表示式1的運算結果。
表示式2:如果布林表示式的值為false,該三元運算子得到的結果就是表示式2的運算結果。
需要注意的是,在三元運算子中表示式1和表示式2的結果的資料型別要相容。
【例項5】使用三元運算子判斷,如果10為偶數則輸出偶數,否則輸出奇數。
根據題目要求,**如下。
classprogram}
執行上面**,效果如下圖。
【例項6】使用三元運算子完成兩個數的比較,將其中較大的數輸出。這裡將兩個數給定為10和20。
根據題目要求,**如下。
classprogram}
執行上面**,效果如下圖。
賦值運算子
賦值運算子中最常見的是等號,除了等號以外還有很多賦值運算子,它們通常都是與其他運算子連用起到簡化操作的作用。
賦值運算子如下表所示。
運算子說明
x=y,等號右邊的值給等號左邊的變數,即把變數y的值賦給變數x
x+=y,等同於x=x+y
x-=y,等同於x=x-y
x*=y,等同於x=x*y
x/=y,等同於x=x/y
x%=y,等同於x=x%y,表示求x除以y的餘數
x++或++x,等同於x=x+1
x–或–x,等同於x=x-1
需要注意的是,++和–運算子放在運算元前和運算元後是有區別的,如果放在運算元前,需要先將運算元加1或減1,然後再與其他運算元進行運算;如果放在運算元後,需要先與其他運算元進行運算,然後運算元自身再加1。
運算子的優先順序
前面介紹了c#中基本的運算子,在表示式中使用多個運算子進行計算時,運算子的運算有先後順序。
如果想改變運算子的運算順序必須依靠括號。運算子的優先順序如下表所示,表中顯示的內容是按優先順序從高到低排序的。
運算子結合性
.(點)、()(小括號)、(中括號)
從左到右
+(正)、-(負)、++(自增)、–(自減)、~(按位非)、!(邏輯非)
從右到左
*(乘)、/(除)、%(取餘)
從左向右
+(加)、-(減)
從左向右
從左向右
從左向右
從左向右
從左向右
從左向右
從左向右
從左向右
從左向右
從右到左
從右到左
儘管運算子本身已經有了優先順序,但在實際應用中還是建議讀者盡量在複雜的表示式中多用括號來控制優先順序,以增強**的可讀性。
c的按位取反運算子( 與邏輯邏輯(!)
c的按位取反運算子 與邏輯邏輯 位運算 位運算的運算分量只能是整型或字元型資料,位運算把運算物件看作是由二進位組成的位串資訊,按位完成指定的運算,得到位串資訊的結果。位運算子有 按位與 按位或 按位異或 按位取反 其中,按位取反運算子是單目運算子,其餘均為雙目運算子。位運算子的優先順序從高到低,依次...
C 運算子過載賦值運算子
自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...
C 運算子過載轉換運算子
為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...