iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
2
Modern Web

C#與ASP.Net入門-我要成為工程師!!系列 第 8

Day08-C#運算式與運算子(+、-、*、/、>、<....等)-來用C#算數學吧!(上)

  • 分享至 

  • xImage
  •  

先來看一下運算式、運算元、運算子的關係圖

https://ithelp.ithome.com.tw/upload/images/20190908/20120055CTeRE2CKnA.png

換算成數學說法來看,運算式(expression)就是算式,運算元(operand)就是要被加減乘除的東西,運算子(operator)就是本篇重點,也就是加減乘除以及其他的運算符號好朋友們!


C#有哪一些運算子?

運算子是用來指定資料做某種計算,按照運算時需要的運算元數目分成:
1. 一元運算子(Unary Operator):包含一個運算元,如:-5
2. 二元運算子(Binary Operator):包含兩個運算元,如:a+4
3. 三元運算子(Tenary Operator):包含三個運算元,如:Min=(a < b)? a:b,表示若 a < b是True,Min=a,反之Min = b。

而根據運算子的功能,可以分為以下幾種類型:
1. 算術運算子
2. 關係運算子(等號比較運算子、比較運算子)
3. 邏輯運算子、條件邏輯運算子
4. 位元運算子(二進位制)
5. 移位運算子(二進位制)
6. 指定運算子
7. 條件運算子

下面就讓我們來一一看一下內容有什麼吧!

算術運算子

分為一元運算子及二元運算子,先講最容易理解的二元運算子

運算子 意義 說明 例子
+ 左邊加右邊 3+2=5
- 左邊減右邊 3-2=1
* 左邊乘以右邊 3 * 2=6
/ 左邊除以右邊 3/2=1.5(用float或是double會顯示1.5,用int會顯示1),見下方程式碼說明
% 取餘數 左邊除以右邊並取其餘數 3%2=1(3除以2餘1)

加法說明:
加法也可以用在字串相加,如下方

 int a = 1, b = 2;
Console.WriteLine(a+b);//一般數字相加

string c = "1", d = "2";
Console.WriteLine(c + d);//字串直接連起來

輸出結果
https://ithelp.ithome.com.tw/upload/images/20190909/20120055e2pPZlFeTa.png

2019/10/20補充:
C# 的加號( + )運算子預設就支援字串串加的功能,只要一群字串串接的物件中只要有一個以上的物件型別是「字串」的話,就會全部變成「字串相加」,只要遇到「非字串」的物件,預設會使用繼承至 object 物件的 ToString() 方法進行轉型,讓所有物件都變成「字串」後進行相加動作。如果物件回傳值為 null 的話,也會改以空字串替代。(資料來源:https://blog.miniasp.com/post/2009/02/01/CSharp-Addition-operator-for-string-concatenation)

除法說明:

int a = 3, b = 2, c;
c = a / b;
Console.WriteLine(c);// int 會輸出1,只顯示到整數

double x = 3.0, y = 2.0, z;
z = x / y;
Console.WriteLine(z);// double 會輸出1.5

https://ithelp.ithome.com.tw/upload/images/20190908/20120055W48NdE6UWt.png

那一元運算子的部分如下

運算子 意義 說明
a++ 自己後加一 a先是自己,然後自己再+1。如:b=a++,先執行b=a,再執行a=a+1。
++a 自己先加一 a先加1後再做後續。如:b=++a,先執行a=a+1,再執行b=a。
a-- 自己後減一 a先是自己,然後自己再-1。如:b=a--,先執行b=a,再執行a=a-1。
--a 自己先減一 a先減1後再做後續。如:b=--a,先執行a=a-1,再執行b=a。
int d = 0;
Console.WriteLine(d);//先輸出d,此時d是0
Console.WriteLine(d++);//輸出d,此時d是0,然後把d+1,0+1=1
Console.WriteLine(d);//因為上面那行,d變成1了
Console.WriteLine("=======================================");

int e = 0;
Console.WriteLine(e);//先輸出e,此時e是0
Console.WriteLine(++e);//把e+1後輸出,0+1=1
Console.WriteLine(e);//e是1
Console.WriteLine("=======================================");

//如果加上算術運算子也是一樣喔
int f = 7;
Console.WriteLine(f);//先輸出7,此時f是7
Console.WriteLine(++f/2);//先執行7+1=8,然後8/2=4,輸出4
Console.WriteLine(f);//f是8,輸出8
Console.WriteLine("=======================================");

int g = 6;
Console.WriteLine(6);//先輸出6,此時g是6
Console.WriteLine(g++ / 2);//先執行6/2=3,輸出3,再執行6+1=7
Console.WriteLine(g);//g是6+1=7,輸出7

執行結果
https://ithelp.ithome.com.tw/upload/images/20190908/20120055wfvAWIeRJv.png

關係運算子(等號比較運算子、比較運算子)

為二元運算子,運算後傳回的結果為布林值:True或False

運算子 意義 數學式
== 相等 A = B
!= 不相等 A ≠ B
> 大於 A > B
< 小於 A < B
>= 大於或等於 A≧B
<= 小於或等於 A≦B
用法就跟數學上的意義是相同的喔~

邏輯運算子、條件邏輯運算子

運算後傳回的結果為布林值:True或False

運算子 意義 說明 分類
! 否定 "非"(not)的意思。若A本身為真,!A為假。若A本身為假,!A為真。 一元邏輯運算子
& 且(And) A & B,當A、B都為真時,結果才會為真 二元邏輯運算子,針對整數型別的運算元,會執行位元邏輯運算。(詳情見位元運算子)
| 或(Or) A | B,當A、B其中一個為真時,結果為真 二元邏輯運算子,針對整數型別的運算元,會執行位元邏輯運算。(詳情見位元運算子)
^ XOr 邏輯互斥 二元邏輯運算子,針對整數型別的運算元,會執行位元邏輯運算。(詳情見位元運算子)
&& A&& B,當A、B都為真時,結果才會為真 二元條件邏輯運算子
|| A || B,當A、B其中一個為真時,結果為真 二元條件邏輯運算子

運用:

  • 身高不小於150cm,小於190cm => (cm>=150)&&(cm < 190)
  • !(3>2) => !(True) =>結果為False

欸等等,這個表裡面好像有兩組東西很像耶,&還有&&,|還有||差在哪?

只有一個的|還有&,在進行判斷時,前後兩個運算元都會評估
兩個的||和&&,在進行判斷時,只有在必要時才會評估右邊的運算元

舉例來說:
假 & 真:已經知道第一個是假了,&還是會求出前後運算元的值才進行判斷
假 && 真:第一個已經是假了,結果必定為假,&&不用求出右邊運算元的值就會進行判斷

所以在進行判斷時||跟&&是比較有效率的,比較重要的比較值就放前面囉~

&以及|如果運用在整數上,會執行位元邏輯運算,請參考下一個位元運算子的說明

下集待續~~~XD

參考資料

MSDN-運算子
Visual C# 2017程式設計經典


上一篇
Day07-C#字串與跳脫字元(Escape Character/逸出字元)
下一篇
Day09-C#運算式與運算子(+、-、*、/、>、<....等)-來用C#算數學吧!(下)
系列文
C#與ASP.Net入門-我要成為工程師!!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
YoChen
iT邦研究生 1 級 ‧ 2019-09-09 13:54:09

&& B,當A、B都為真時,結果才會為真

&&的說明欄位有缺字哦~XDDD

立馬修改!感謝提醒!XD

0
蝸牛
iT邦新手 5 級 ‧ 2023-06-06 10:59:38

不對,& | ^ 是位元運算,不是邏輯運算
你之所以誤認 true & true 跟 true && true 一樣是邏輯運算
只是因為 1 AND 1 位元運算的結果剛好也是 1 。

我要留言

立即登入留言