iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0
自我挑戰組

初心者學C#系列 第 11

Day 11:C#的運算子 (ಠ∀ಠ) 想把東西解釋好真難

  • 分享至 

  • xImage
  •  

※以下內容皆是新手撰寫,內容可能不完全正確

茫然。已經不知道自己在寫什麼了 :D

今天要談的是 運算子(operators) ,也就是加減乘除那些再多一些(多很多)花樣,而擺在運算子旁邊那些東西叫 運算元(operands) ;運算子令編譯器算數學或做邏輯推理(之類的)。C#語言裡有內建很多不一樣的運算子,分成六種:

算術運算子(arithmetic operators)
基本的+(加)-(減)*(乘)/(除),%(整數相除輸出餘數)、++(整數值加一)和--(整數值減一)。設x=1,y=2:

a = x + y; //加法
b = x-y; //減法
c= x*y; //乘法
d = y/x; //除法,y為分子,x為分母
e = y%x //除法,輸出餘數0
x++ //x變成2
y-- //y變成1

這麼多運算子當中,我覺得加減乘除這類算是最容易懂的了 :>

關聯式運算子(relational operators)
關聯式運算子做的是做大於、小於、等於這類的判斷,目前有用到的地方是if、else、else if做判斷的地方。直接用例子解釋,設x=1,y=2。

x == y //等於;x和y不相等,所以這不成立
x != y //不等於;x和y不相等,所以成立
x > y //大於;x小於y,不成立
x < y //小於;x小於y,成立
x >= y //大於等於;x小於y,不成立
x <= y //小於等於;x小於y,成立

邏輯運算子(logical operators)
邏輯運算子可以想成高中數學學過的且跟或(畫圓圈把交集塗顏色、把兩個圈圈的範圍塗顏色等XDD)及一個唱反調的運算子。假設t=true,f=false:

t && f /AND邏輯運算子,兩邊皆不為0才true,所以這邊是false
t || f /OR邏輯運算子,其中一邊不為0則true,所以這邊是true
!(t && f) /NOT邏輯運算子,會把true變false、false變true,所以這裡變true

按位元運算子(bitwise operators)
這種運算子用於位元(bits),剛看到這東西的解釋一臉問號,不過想通之後就只是拿來算二進位(我們一般用的是十進位(decimal))過的運算元。舉例,87會轉換成1010111(12^6 + 02^5 + 12^4 + 023 + 12^2 + 12^1 + 12^0 = 87)。由於平常不會使用二進位,這方面比較難懂應該很正常(應該啦…),把1當作truth、0當作false。用tutorialspoint的例子解釋。A=60,二進位為0011 1100;B=13,二進位為0000 1101:

A&B 是0000 1100 //想成這個狀況下優先取0
A|B是0011 1101 //想成這個狀況下優先取1
A^B是0011 0001 //取其中一個有的,另一個沒有的;e.g.兩個都有1的位置改成0
~A 是1100 0011 //位元補數運算子,全部1變成0,0變成1
A<<2是1111 0000 //1都往左移
A>>2是0000 1111 //1都往右移

呼,這有夠難解釋的QwQ 二進位什麼的好煩

指定運算子(assignment operators)
負責指定/給值的運算子,個人覺得下面有些比較簡單的解法不如原本的寫法,像是x=x+z直接寫出來,看上去更直覺;用法如下:

x = y+z //=,前幾篇常出現,這裡表示給予x這個變數y+z這個值
x+=z //+=,這裡意思是x=x+z
x-=y //-=,這裡意思是x=x-y
x*=y //*=,這裡意思是x=x*y
x/=z // /=,這裡意思是x=x/z,好多縮寫的方法
x<<=5等於x = x<<2 //左移AND
y>>=7等於y = y>>7 //右移AND
x&=9等於x = x&9 //按位元AND
x^=1等於x = x^1 //排除ㄉ按位元OR
x|=2等於x = x|2 //非排除ㄉ按位元OR

其他運算子(miscellaneous operators)
雖說是「其他」,但這些運算子都是寫C#不可或缺的一部分吧~

  1. sizeof():會輸出某資料類型的大小。
  2. typeof():輸出某class的類型。
  3. &:可輸出某變數的位址。
  4. *:e.g. *b,可為某變數做一個叫’b’的指標。
  5. :?:格式:<若條件屬實>?A值:<若條件不屬實>B值
  6. is:判斷某物件是否屬於某類型;If(A is B)
  7. as:將A物件轉換成B物件,如果沒辦法轉換,會出現null;格式:
    <表式>as<型式>

運算子的先後順序(Operator Precedence)
用個簡單的例子解釋,2+5*7的答案是37而非70,因為乘法運算子優先於加法運算子。Programiz有完整的列表:https://www.programiz.com/csharp-programming/operator-precedence-associativity

寫到這邊,可以說快暴斃了,這篇寫得好苦啊啊啊啊(鬼叫個屁)
希望後面幾篇不要再寫得這麼卡 QwQ 下一篇要講的是決策

參考資料:
(a) Tutorialspoint; C# - Operators
https://www.tutorialspoint.com/csharp/csharp_operators.htm
(b) Microsoft; 一個’s 補數運算子:~
https://docs.microsoft.com/zh-tw/cpp/cpp/one-s-complement-operator-tilde?view=vs-2019


上一篇
Day 10:C#的常數與文字 (ꈍᴗꈍ)
下一篇
Day 12:C#裡做決策 (┛◉Д◉)┛
系列文
初心者學C#30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言