Golang與運算符


在這裏插入圖片描述

1. 算術運算符

運算符 描述 示例 結果
+ 正數符號 +99 99
- 負數符號 -99 -99
+ 1+99 100
- 99-1 98
* 3*3 9
/ 99/3 33
% 取模 9/2 1
++ 自增 var i = 2 i++ 3
自減 var i= 2 i– 1
+ 字符串連接符號 “score:”+“100” “score:100”

算術運算符只能在同一數據類型之間進行,否則會報錯, int32 只能和int32 類型的數據進行算術運算

package main

import "fmt"

func main(){
	var n1 int32 = 99
	var n2 int64 = 1
	fmt.Println(n1+n2)
}

$ go run main.go
invalid operation: n1 + n2 (mismatched types int32 and int64)

Go語言中自增(++)和自減(–)只能跟在變量的後面 ,放在變量前面就是語法錯誤

package main

import "fmt"

func main(){
	var a int
    //正確
	a++
	fmt.Println(a)
    //syntax error: unexpected ++, expecting 
	++a
	fmt.Println(a)
}

2. 賦值運算符

運算符 描述 示例 結果
= 賦值運算符 將右邊的值賦給左邊 s = x+y
+= 相加之後 賦值給左邊 var s int = 99
s +=1
//等價於
//s = s+1
100
-= 相減之後 賦值給左邊 var s int = 99
s -=1
//等價於
//s = s-1
98
*= 相乘之後 賦值給左邊 var s int = 99
s *=10
//等價於
//s = s *10
990
/= 相除之後 賦值給左邊 var s int = 9
s /=3
//等價於
//s = s / 3
3
%= 取餘之後 賦值給左邊 var s int = 9
s %=2
//等價於
//s = 9 % 2
1
<<= 位左移後賦值
>>= 位右移後賦值
&= 按位與後賦值
^= 按位異或後賦值
|= 按位或後賦值
package main

import "fmt"

func main(){
	var n int = 32
	n <<=3
	fmt.Println("n=",n) // 256
	n >>=2
	fmt.Println("n=",n) // 64
	n1 := 64
	n1 &= 2
	fmt.Println("n1=",n1)
	n2 := 63
	n2 ^= 2
	fmt.Println("n2=",n2)
	n3 := 62
	n3 |= 2
	fmt.Println("n3=",n3)
}

$ go run main.go
n= 256
n= 64
n1= 0
n2= 61
n3= 62

3. 關係運算符

運算符 描述 示例 結果
== 相等 9==8 false
!= 不等 9==8 true
< 小於 9<8 false
> 大於 9>8 true
<= 小於等於 9<=8 false
>= 大於等於 9=>8 true

關係運算的結果都是bool型,不是true 就是false,多見於邏輯流程中

關係運算符都是二元運算符,運算符兩端都需要有數據

4. 邏輯運算符

運算符 描述 示例 結果
&& 邏輯與運算符 ,都是true才爲true,否則false T(true) &&F(false) false
|| 邏輯或運算符 ,都爲false才爲false,否則true T(true) || F(false) true
! 邏輯非運算符, 最終結果取反,true的爲false,false的爲true !(T(true) &&F(false)) true

邏輯運算之後的結果是一個bool類型 ,true或者false

&& 又叫做短路與 ,第一個條件爲false ,則第二個條件不判斷,結果就是false

|| 又叫做短路或 ,第一個條件爲true ,則第二個條件不判斷,結果就是true

5. 位運算符

運算符 描述
& 按位與運算符 參與運算的兩數對應的二進制位相與,(同爲1結果是1 ,否則是0)
| 按位或運算符 參與運算的兩數對應的二進制位相或,(同爲0結果是0 ,否則是1)
^ 按位異或運算符 參與運算的兩數對應的二進制位相異或,(二進制位相同則爲0 ,不同則爲1)
<< 左移運算符,左邊運算數的各位二進制位全部左移若干位,高位丟棄 ,低位補零,移動n位就是乘以2的n次方
>> 右移運算符,左邊運算數的各位二進制位全部右移若干位,移動n位就是除以2的n次方
package main

import "fmt"

func main() {
	var n1 uint = 9
	var n2 uint = 3
	fmt.Printf("%08b\n", n1)		//		        00001001
	fmt.Printf("%08b\n", n2)		//				00000011
	fmt.Printf("%08b\n", n2&n1)  //  按位與運算       00000001
	fmt.Printf("%08b\n", n2|n1)  //  按位或運算       00001011
	fmt.Printf("%08b\n", n2^n1)  //  按位異或運算     00001010
	fmt.Printf("%08b\n", n1<<1)  //  左移運算符	     00010010
	fmt.Printf("%08b\n", n1>>1)  //  右移運算符	     00000100
}

$ go run main.go
00001001
00000011
00000001
00001011
00001010
00010010
00000100

6. 其他運算符

運算符 描述 示例 結果
& 取地址符,返回變量的實際存儲地址 &x 變量x在內存中的實際地址
* 指針變量 *x 訪問指針變量
package main

import "fmt"

func main() {
	var n int = 99
	fmt.Printf("n memory address = %v\n", &n)
	var p *int
	p = &n
	fmt.Printf("p memory address = %v\n", p)
	fmt.Printf("*p = %d",*p)
}
$ go run main.go
n memory address = 0xc000054080
p memory address = 0xc000054080
*p = 99
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章