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