目录
GO 运算符
运算符用于在程序运行时执行数学或逻辑运算。 Go语言内置的运算符有: ●算术运算符 ●关系运算符 ●逻辑运算符 ●位运算符 ●赋值运算符 ●其他运算符
1,算数运算符
下表列出了所有Go语言的算术运算符。假定A值为10, B值为20.
运算符 | 描述 | 实例 |
---|---|---|
+ | 相加 | A+ B输出结果30 |
- | 相减 | A-B输出结果-10 |
* | 相乘 | A*B输出结果200 |
/ | 相除 | B/A输出结果2 |
% | 求余 | B%A输出结果0 |
++ | 自增 | A++输出结果11 |
-- | 自减 | A--输出结果9 |
例:
相加 package main import "fmt" func main() { a := 10 b := 20 fmt.Println("a+b=", a+b) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a+b= 30 [Done] exited with code=0 in 0.451 seconds 字符串拼接 package main import "fmt" func main() { a := "10" b := "20" fmt.Println("a+b=", a+b) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a+b= 1020 [Done] exited with code=0 in 0.44 seconds
相减 package main import "fmt" func main() { a := 10 b := 20 fmt.Println("a-b=", a-b) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a-b= -10 [Done] exited with code=0 in 0.442 seconds
相乘 package main import "fmt" func main() { a := 10 b := 20 fmt.Println("a*b=", a*b) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a*b= 200 [Done] exited with code=0 in 0.432 seconds
相除 package main import "fmt" func main() { a := 10 b := 20 fmt.Println("a/b=", float32(a)/float32(b)) //不为整数需要转换数据类型 } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" b/a= 0.5 [Done] exited with code=0 in 0.443 seconds package main import "fmt" func main() { a := 10 b := 20 fmt.Println("a/b=", a/b) //未转换数据类型值只取整数位的数值 } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a/b= 0 [Done] exited with code=0 in 0.434 seconds
求余 package main import "fmt" func main() { a := 10 b := 20 fmt.Println("b%a=", b%a) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" b%a= 0 [Done] exited with code=0 in 0.444 seconds
自增 package main import "fmt" func main() { a := 10 a++ //相当于a=a+1或者a+=1 fmt.Println("a=", a) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a= 11 [Done] exited with code=0 in 0.431 seconds
自减 package main import "fmt" func main() { a := 10 a -= 1 //相当于a--或者a=a-1 fmt.Println("a=", a) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a= 9 [Done] exited with code=0 in 0.441 seconds
2,关系运算符
下表列出了所有Go语言的关系运算符。假定A值为10, B值为20。
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个值是否相等,如果相等返回True否则返回False. | (A== B)为False |
!= | 检查两个值是否不相等,如果不相等返回True否则返回False | (A!= B)为True |
> | 检查左边值是否大于右边值,如果是返回True否则返回False. | (A> B)为False |
< | 检查左边值是否小于右边值,如果是返回True否则返回False | (A< B)为True |
>= | 检查左边值是否大于等于右边值,如果是返回True否则返回False | (A>= B)为False |
<= | 检查左边值是否小于等于右边值,如果是返回True否则返回False | (A <= B)为True |
示例:
package main import "fmt" func main() { a := 10 b := 20 if a == b { fmt.Println("第一行:a等于b") } else { fmt.Println("第一行:a不等于b") } if a < b { fmt.Println("第二行:a小于b") } else { fmt.Println("第二行:a不小于b") } if a > b { fmt.Println("第三行:a大于b") } else { fmt.Println("第三行:a不大于b") } a = 5 //可以重新赋值 b = 10 if a <= b { fmt.Println("第四行:a小于等于b") } else { fmt.Println("第四行:b大于等于a") } } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" 第一行:a不等于b 第二行:a小于b 第三行:a不大于b 第四行:a小于等于b [Done] exited with code=0 in 0.441 seconds
3,逻辑运算符
下表列出了所有Go语言的逻辑运算符。假定A值为True, B值为False.
运算符 | 描述 | 实例 |
---|---|---|
&& | 逻辑AND运算符。如果两边的操作数都是True,则条件True,否则为false | (A&&B)为False |
|| | 逻辑OR运算符。如果两边的操作数有一个True,则条件True,否则为false | (A||B)为true |
! | 逻辑NOT运算符。如果条件为 True,则逻辑NOT条件False,否则为 | !(A&& B)为true |
示例:
package main import "fmt" func main() { var ( a = true b = false ) if a && b { fmt.Println("true") } else { fmt.Println("false") } if a || b { fmt.Println("true") } else { fmt.Println("false") } if !(a && b) { fmt.Println("true") } else { fmt.Println("false") } } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" false true true [Done] exited with code=0 in 0.436 seconds
4,位运算符
位运算符对整数在内存中的二进制位进行操作。 下表列出了位运算符&, |,和^的计算:
p | q | p&q | p|q | p^q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
示例:
package main import "fmt" func main() { //位运算符 var ( a = 22 //二进制10110 b = 10 //二进制 1010 ) fmt.Println("&=", a&b)//&全1为1,有0为0 :00010 fmt.Println("|", a|b) //|有1为1,全0为0 :11110 fmt.Println("a^b", a^b) //相同为0,有1为1 :11100 } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" &= 2 | 30 a^b 28 [Done] exited with code=0 in 0.445 seconds
Go语言支持的位运算符如下表所示。假定A为60,B为13:
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符"&”是双目运算符。其功能是参与运算的两数各对应的二进位相与 | (A&B)结果为12,二进制为0000 1100 |
| | 按位或运算符"|"是双目运算符。其功能是参与运算的两数各对应的二进位相或 | (A|B)结果为61,二进制位0011 1101 |
^ | 按位异或运算符“是双目运算符。其功能是参 与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1 | (A^ B)结果为49,二进制为0011 0001 |
<< | 左移运算符”<<是双目运算符。左移n位就是乘以2的n次方。其功能把”<<"左边的运算数的各二进位全部左移若干位,由"<<* 右边的数指定移动的位数,高位丢弃,低位补0 | A<< 2结果为240,二进制为1111 0000 |
>> | 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。其功能是把">>"左边的运算数的各: -进位全部右移若干位,“>>"右边的数指定移动的位数 | A>> 2结果为15,二进制为0000 1111 |
示例:
package main import "fmt" func main() { var ( a = 60 //60=0011 1100 b = 13 //13=0000 1101 c = 0 //0 =0000 0000 ) c = a & b //0000 1100 =12 fmt.Println("第一行c的值为", c) c = a | b //0011 1101 =61 fmt.Println("第二行c的值为", c) c = a ^ b //0011 0001 =49 fmt.Println("第三行c的值为", c) c = a << 2 //1111 0000 =240 fmt.Println("第四行c的值为", c) c = a >> 2 //0000 1111 =15 fmt.Println("第五行c的值为", c) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" 第一行c的值为 12 第二行c的值为 61 第三行c的值为 49 第四行c的值为 240 第五行c的值为 15 [Done] exited with code=0 in 0.442 seconds
五,赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单赋值的运算符,将一个表达式的值赋给一个左值 | C=A+ B将A+ B表达式结果赋值给C |
+= | 相加后再赋值 | 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 |
|= | 按位或后再赋值 | C |=2等于C=C|2 |
示例:
package main import "fmt" func main() { a := 21 c := 0 c = a fmt.Println("第一行:C的值为", c) c += a fmt.Println("第二行:C的值为", c) c -= a fmt.Println("第三行:C的值为", c) c *= a fmt.Println("第四行:C的值为", c) c /= a fmt.Println("第五行:C的值为", c) c = 200 fmt.Println("第六行:C的值为", c) c <<= 2 fmt.Println("第七行:C的值为", c) c >>= 2 fmt.Println("第八行:C的值为", c) c &= 2 fmt.Println("第九行:C的值为", c) c ^= 2 fmt.Println("第一行:C的值为", c) c |= 2 fmt.Println("第一行:C的值为", c) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" 第一行:C的值为 21 第二行:C的值为 42 第三行:C的值为 21 第四行:C的值为 441 第五行:C的值为 21 第六行:C的值为 200 第七行:C的值为 800 第八行:C的值为 200 第九行:C的值为 0 第一行:C的值为 2 第一行:C的值为 2 [Done] exited with code=0 in 0.444 seconds
6,其他运算符
下表列出了Go语 言的其他运算符。
运算符 | 描述 | 实例 |
---|---|---|
& | 返回变量存储的地址 | &a;将给出变量的实际地址 |
* | 指针变量 | *a;是一个指针变量 |
示例:
package main import "fmt" func main() { a := 21 b := &a fmt.Println("a的指针:", b) //指针依赖于变量中的位置调用 fmt.Println("a的地址:", &a)//&调用变量内存中的位置 } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" a的地址: 0xc000014098 a的指针: 21 [Done] exited with code=0 in 0.449 seconds
7,运算符的优先级
有些运算符拥有较高的优先级,二元运算符的运算方向均显从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
优先级 | 运算符 |
---|---|
5 | * / % << >> & &^ |
4 | + - | ^ |
3 | = = != <<= >>= |
2 | && |
1 | || |
示例:
package main import "fmt" func main() { a := 20 b := 10 c := 15 d := 5 e := 0 e = (a + b) * c / d fmt.Println("(a+b)*c/d=", e) e = (a + b) * c / d fmt.Println("(a+b)*c/d=", e) e = (a + b) * (c / d) fmt.Println("(a+b)*(c/d)=", e) e = a + (b*c)/d fmt.Println("e=a+(b*c)/d=", e) } [Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go" (a+b)*c/d= 90 (a+b)*c/d= 90 (a+b)*(c/d)= 90 e=a+(b*c)/d= 50 [Done] exited with code=0 in 0.439 seconds