TASK04:運算子、控制語句

學了又忘的海倫發表於2020-12-17

運算子

算術運算子

返回數值

運算子描述
+相加
-相減
*相乘
/相除
%求餘
++自增
自減

關係運算子

返回True或者False

運算子描述
==檢查兩個值是否相等,如果相等返回 True 否則返回 False。
!=檢查兩個值是否不相等,如果不相等返回 True 否則返回 False。
>檢查左邊值是否大於右邊值,如果是返回 True 否則返回 False。
<檢查左邊值是否小於右邊值,如果是返回 True 否則返回 False。
<檢查左邊值是否小於右邊值,如果是返回 True 否則返回 False。
>=檢查左邊值是否大於等於右邊值,如果是返回 True 否則返回 False。
<=檢查左邊值是否小於等於右邊值,如果是返回 True 否則返回 False。

邏輯運算子

運算子描述
&&邏輯 AND 運算子。 如果兩邊的運算元都是 True,則條件 True,否則為 False。
l l邏輯 OR 運算子。 如果兩邊的運算元有一個 True,則條件 True,否則為 False。
!邏輯 NOT 運算子。 如果條件為 True,則邏輯 NOT 條件 False,否則為 True。

位運算子

運算子描述
&按位與運算子"&"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相與。
l按位或運算子"l"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相或
^按位異或運算子"^"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。
<<左移運算子"<<“是雙目運算子。左移n位就是乘以2的n次方。 其功能把”<<“左邊的運算數的各二進位全部左移若干位**,由”<<"右邊的數指定移動的位數,高位丟棄,低位補0。**
>>右移運算子">>“是雙目運算子。右移n位就是除以2的n次方。 其功能是把”>>“左邊的運算數的各二進位全部右移若干位,”>>"右邊的數指定移動的位數。
  1. 什麼是位運算
    程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算就是直接對整數在記憶體中的二進位制位進行操作
  2. 雙目運算子
    運算所需變數為兩個的運算子叫做雙目運算子,或者要求運算物件的個數是2的運算子稱為雙目運算子。

賦值運算子

運算子描述例項
=簡單的賦值運算子,將一個表示式的值賦給一個左值
+=相加後再賦值C += A 等於 C = C + A
-=相減後再賦值C -= A 等於 C = C - A
*=相乘後再賦值C *= A 等於 C = C * A
/=相除後再賦值C /= A 等於 C = C / A
%=求餘後再賦值C %= A 等於 C = C % A
<<=左移後賦值C <<= 2 等於 C = C << 2
>>=右移後賦值C >>= 2 等於 C = C >> 2
&=按位與後賦值C &= 2 等於 C = C & 2
^=按位異或後賦值C ^= 2 等於 C = C ^ 2

其他運算子

運算子描述例項
&返回變數儲存地址&a; 將給出變數的實際地址。
*指標變數*a; 是一個指標變數

優先順序

優先順序運算子
5* / % << >> & &^
4+ -
3== != < <= > >=
2&&
1ll

控制語句

條件語句

指定一個或多個條件,並通過測試條件是否為 true 來決定是否執行指定語句,並在條件為 false 的情況在執行另外的語句。

if語句

  1. 由一個布林表示式後緊跟一個或多個語句組成。
  2. 可以使用可選的 else 語句, else 語句中的表示式在布林表示式為 false 時執行;語句中可嵌入一個或多個 if 或 else if 語句
  3. 注意,Go 沒有三目運算子,所以不支援 ?: 形式的條件判斷。

switch語句

  1. 用於基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上至下逐一測試,直到匹配為止;
  2. 匹配項後面不需要再加 break
  3. switch 預設情況下 case 最後自帶 break 語句,匹配成功後就不會執行其他 case,如果我們需要執行後面的 case,可以使用 fallthrough
  4. fallthrough:強制執行後面的 case 語句,fallthrough 不會判斷下一條 case 的表示式結果是否為 true;
  5. 解釋:從第一個判斷表示式為 true 的 case 開始執行,如果 case 帶有 fallthrough,程式會繼續執行下一條 case,且它不會去判斷下一個 case 的表示式是否為 true
  • 支援多條件匹配
  • 不同的 case 之間不使用 break 分隔,預設只會執行一個 case
  • 如果想要執行多個 case,需要使用 fallthrough 關鍵字,也可用 break 終止

select語句

  1. 每個 case 都必須是一個通訊
  2. 所有 channel 表示式都會被求值
  3. 所有被髮送的表示式都會被求值
  4. 如果任意某個通訊可以進行,它就執行,其他被忽略。
  5. 如果有多個 case 都可以執行,Select 會隨機公平地選出一個執行。其他不會執行。 否則:
  • 如果有 default 子句,則執行該語句。
  • 如果沒有 default 子句,select 將阻塞直到某個通訊可以執行;Go 不會重新對 channel 或值進行求值。

迴圈語句

for 迴圈

for init; condition; post { } //for
for condition { } //while
for {}
//init: 一般為賦值表示式,給控制變數賦初值;
//condition: 關係表示式或邏輯表示式,迴圈控制條件;
//post: 一般為賦值表示式,給控制變數增量或減量。

for 迴圈的 range 格式可以對 slice、map、陣列、字串等進行迭代迴圈:

for key, value := range oldMap {
  newMap[key] = value

迴圈巢狀

for [condition |  ( init; condition; increment ) | Range] {
 for [condition |  ( init; condition; increment ) | Range] {
   statement(s);
 }
 statement(s);
}

迴圈控制語句

  1. break語句
  • 用於迴圈語句中跳出迴圈,並開始執行迴圈之後的語句。
  • break 在 switch(開關語句)中在執行一條 case 後跳出語句的作用。
  • 在多重迴圈中,可以用標號 label 標出想 break 的迴圈。
  1. continue語句
  • 跳過當前迴圈的剩餘語句,然後繼續進行下一輪迴圈。
  1. goto
  • 無條件轉移到過程中指定行,與條件語句配合,實現條件轉移、構成迴圈、跳出迴圈體等(不建議用,造成混亂)

相關文章