8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子

BUG弄潮儿發表於2024-03-23

Golang 中的運算子

1、Golang 內建的運算子

  • 算術運算子
  • 關係運算子
  • 邏輯運算子
  • 位運算子
  • 賦值運算子

2、算數運算子

運算子 描述
+ 相加
- 相減
* 相乘
/ 相除
% 求餘=被除數-(被除數/除數)*除數

注意: ++(自增)和--(自減)在 Go 語言中是單獨的語句,並不是運算子。

package main

import ( 
   "fmt"
)

func main() {
   fmt.Println("10+3=", 10+3) // =13
   fmt.Println("10-3=", 10-3) // =7
   fmt.Println("10*3=", 10*3) // =30
   //除法注意:如果運算的數都是整數,那麼除後,去掉小數部分,保留整數部分
   fmt.Println("10/3=", 10/3) //3
   fmt.Println("10.0/3=", 10.0/3) //3.3333333333333335
   // 取餘注意 餘數=被除數-(被除數/除數)*除數
   fmt.Println("10%3=", 10%3) // =1
   fmt.Println("-10%3=", -10%3) // -1
   fmt.Println("10%-3=", 10%-3) // =1
   fmt.Println("-10%-3=", -10%-3) // =-1
}

注意:在 golang 中,++ 和 -- 只能獨立使用 錯誤寫法如下:

var i int = 8
var a int
a = i++ //錯誤,i++只能獨立使用
a = i-- //錯誤, i--只能獨立使用

注意:在 golang 中沒有前++ 錯誤寫法如下:

var i int = 1
++i // 錯誤,在 golang 沒有 前++
--i // 錯誤,在 golang 沒有 前--
fmt.Println("i=", i)

++ --正確寫法:

var i int = 1
i++
fmt.Println("i=", i)

3、關係運算子

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

import ( 
   "fmt"
)

func main() {
   //演示關係運算子的使用
   var n1 int = 9
   var n2 int = 8
   fmt.Println(n1 == n2) //false
   fmt.Println(n1 != n2) //true
   fmt.Println(n1 > n2) //true
   fmt.Println(n1 >= n2) //true
   fmt.Println(n1 < n2) //flase
   fmt.Println(n1 <= n2) //flase
   flag := n1 > n2
   fmt.Println("flag=", flag)
}

4、邏輯運算子

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

package main

import (
	"fmt"
)

func main() {
    //演示邏輯運算子的使用 &&
    var age int = 40
    if age > 30 && age < 50 {
        fmt.Println("ok1")
    }
    if age > 30 && age < 40 {
        fmt.Println("ok2")
    }
    //演示邏輯運算子的使用 ||
    if age > 30 || age < 50 {
        fmt.Println("ok3")
    }
    if age > 30 || age < 40 {
        fmt.Println("ok4")
    }
    //演示邏輯運算子的使用 !
    if age > 30 {
        fmt.Println("ok5")
    }
    if !(age > 30) {
        fmt.Println("ok6")
    }
}

邏輯運算子短路演示


package main

import ( 
	"fmt"
)

func test() bool {
	fmt.Println("test...")
	return true
}

func main() {
    var i int = 10
    if i < 9 && test() {
    	fmt.Println("ok...")
    }
    if i > 9 || test() {
    	fmt.Println("hello...")
	}
}

5、賦值運算子

運算子 描述
= 簡單的賦值運算子,將一個表示式的值賦給一個左值
+= 相加後再賦值
-= 相減後再賦值
*= 相乘後再賦值
/= 相除後再賦值
%= 求餘後再賦值

d := 8 + 2*8 // 賦值運算從右向左
fmt.Println(d)

x := 10
x += 5 //x=x+5
fmt.Println("x += 5 的值:", x)

x := 10
x -= 5 //x=x-5
fmt.Println("x -= 5 的值:", x)

x := 10
x *= 5 //x=x*5
fmt.Println("x *= 5 的值:", x)

x := 10.0
x /= 5
fmt.Println("x /= 5 的值:", x)

x := 10
x %= 3
fmt.Println("x %= 3 的值:", x)

6、運算子練習

  • 練習 1:有兩個變數,a 和 b,要求將其進行交換,最終列印結果
a := 9
b := 2
t := a
a = b //
b = t //
fmt.Printf("交換後的情況是 a = %v , b=%v \n", a, b)
  • 練習 2:假如還有 100 天放假,問:xx 個星期零 xx 天
var days int = 100
var week int = days / 7
var day int = days % 7
fmt.Printf("%d 個星期零%d 天\n", week, day)
  • 練習 3:定義一個變數儲存華氏溫度,華氏溫度轉換攝氏溫度的公式為:5/9*(華氏溫度-100), 請求出華氏溫度對應的攝氏溫度
var huashi float32 = 134.2
var sheshi float32 = 5.0 / 9 * (huashi - 100)
fmt.Printf("%v 對應的攝氏溫度=%v \n", huashi, sheshi)

7、位運算子(瞭解)

位運算子對整數在記憶體中的二進位制位進行操作。

運算子 描述
& 參與運算的兩數各對應的二進位相與。 (兩位均為 1 才為 1)
` `
^ 參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為 1。
(兩位不一樣則為 1)
<< 左移 n 位就是乘以 2 的 n 次方。 “a<<b”是把 a 的各二進位全部左移 b 位,高位
丟棄,低位補 0。
>> 右移 n 位就是除以 2 的 n 次方。 “a>>b”是把 a 的各二進位全部右移 b 位。
package main

import "fmt"

func main() {
    /* & 兩位均為 1 才為 1
    | 兩位有一個為 1 就為 1
    ^ 相異或 兩位不一樣則為 1
    << 左移 n 位就是乘以 2 的 n 次方。 “a<<b”是把 a 的各二進位全部左移 b 位,
    高位丟棄,低位補 0。
    >> 右移 n 位就是除以 2 的 n 次方。
    */

    var a int = 5 // 101
    var b int = 2 // 010
    fmt.Println("a&b=", a&b) // 000 值 0
    fmt.Println("a|b=", a|b) // 111 值 7
    fmt.Println("a^b=", a^b) // 111 值 7
    fmt.Println("5>>2=", a>>b) // 5 右移 2 位 1
    fmt.Println("5<<2=", a<<b) // 5 左移 2 位 10100
    fmt.Println("5<<1=", 5<<1) // 1010
    fmt.Println("5>>1=", 5>>1) // 10
    fmt.Println("7>>2=", 7>>2) // 1
}

相關文章