Go语言学习之路-4-Go语言运算符
了解运算符
运算符运算符是一种告诉程序执行特定的数学或逻辑操作的符号
Go语言运算符有5种:
运算符名称 | 运算符简述 |
---|---|
算术运算符 | 加减乘除运算 |
关系运算符 | 关系运算符有6种关系,分别为小于、大于、小于等于、大于等于、等于、不等于 |
逻辑运算符 | 或者、并且、反义词(如果为真(True)就取反义词(False)、如果为假(Flase)就取反义词(True)) |
位运算符 | 二进制操作符 |
赋值运算符 | 把某个值赋值给某个变量 |
算术运算符
运算符 | 描述 |
---|---|
+ | 相加 fmt.Println(1 + 1) // 相加结果为2 |
- | 相减 fmt.Println(1 - 1) // 相减结果为0 |
* | 相乘 fmt.Println(6 * 6) // 相乘结果为36 |
/ | 相除 fmt.Println(36 / 5) // 相除结果为7,余数为1,下面是取余 |
% | 求余 fmt.Println(36 / 5) // 求余数,36除以5,结果为7余数为1 |
++和--形成单独的语句,所以他们并没有归类到算术运算符里
package main
import (
"fmt"
)
func main() {
var a int = 10
var b int8 = 100
var c float32 = 10.1
var d float64 = 100.1
a++
b++
c--
d--
fmt.Println(a, b, c, d)
}
/*
结果:
11 101 9.1 99.1
*/
关系运算符
运算符 | 描述 |
---|---|
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False |
== | 检查两个值是否相等,如果相等返回 True 否则返回 False |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False |
package main
import (
"fmt"
)
func main() {
fmt.Println(10 > 1)
fmt.Println(1 < 10)
fmt.Println(10 == 10)
fmt.Println(10 >= 1)
fmt.Println(1 <= 10)
fmt.Println(10 != 1)
}
逻辑运算符
运算符 | 描述 |
---|---|
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False |
|| | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False |
! | 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True |
package main
import (
"fmt"
)
func main() {
fmt.Println(10 > 1 && 10 > 100)
fmt.Println(10 > 1 || 10 > 100)
// !
fmt.Println(!(10 > 100))
fmt.Println(10 != 1)
}
/*
结果:
false
true
true
true
*/
位运算符
运算符 | 描述 |
---|---|
& | 参与运算的两数各对应的二进位相与。(二进制位对比,都为1那么这个二进制位才为1) |
| | 参与运算的两数各对应的二进位相或。(二进制位对比,两位有一个为1就为1) |
^ | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(二进制位,两位不一样则为1) |
<< | 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
>> | 右移n位就是除以2的n次方。“a>>b”是把a的各二进位全部右移b位。 |
位运算符一般用的比较少,由于它的运算速度以及在特定情况下它的作用非常NICE很多源码里场景比较多看下面几个典型例子
位运算:相与实例
package main
import "fmt"
func main() {
a, b := 4, 5
fmt.Printf("a的int值: %d, a的二进制: %b | b的int值: %d, b的二进制: %b\n", a, a, b, b)
// & 相与的两个二进制位同为1,那么才为1
c := a & b
fmt.Printf("c的int值: %d, c的二进制: %b\n", c, c)
// & 相与的应用场景判断奇偶数
fmt.Println(IsOdd(10))
}
// IsOdd 任意数和1相与,判断传递过来的数的二进制最后一位是1还是0 是1则为奇数 0则为偶数
func IsOdd(i int) bool {
return (i & 1) == 1
}
位运算: 移动的例子
package main
import "fmt"
// ByteSize 为了更好的区分变量类型标识它是定义大小的变量重新声明一个
type ByteSize float64
const (
// B 字节
B ByteSize = 1 << (10 * iota) // 1<<(10*0)
// KB = 1024 B (1<<(10*1) 左移动10位 2的10次方=1024 个字节)
KB
// MB = 1024 KB (1<<(10*2) 左移动20位 2的20次方=1048576 个字节 )
MB
// GB = 1024 MB (1<<(10*3) 左移动30位 2的30次方=1073741824 个字节)
GB // 1<<(10*3)
// TB = 1024 GB (1<<(10*4) 左移动40位 2的40次方=1099511627776 个字节)
TB
// PB = 1024 TB (1<<(10*5) 做移动50位 2的50次方=1125899906842624 个字节)
PB
)
func main() {
fmt.Println(B, KB, MB, GB, TB, PB)
}
赋值运算
运算符 | 描述 |
---|---|
= | 简单的赋值运算符,将一个右边表达式的值复制给左边 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
|= | 按位或后赋值 |
^= | 按位异或后赋值 |
![](https://images.cnblogs.com/cnblogs_com/luotianshuai/1009142/o_o_Warning.png)