package main
import "fmt"
func main() {
var a int = 10
var b int = 20
var c float32 = 10.123
var d float32 = 20.123
fmt.Println("a + b = ", a+b)
fmt.Println("c + d = ", c+d)
fmt.Println("a - b = ", a-b)
fmt.Println("c - d = ", c-d)
fmt.Println("a * b = ", a*b)
fmt.Println("c * d = ", c*d)
fmt.Println("a / b = ", a/b)
fmt.Println("c / d = ", c/d)
fmt.Println("a % b = ", a%b)
// fmt.Println("c % d = ", c%d) // 浮点类型不能使用 %
a++ // 必须写成单独语句
fmt.Println("a++ = ", a)
c++
fmt.Println("c++ = ", c)
// ++a // 不支持前置 ++ 操作
b--
fmt.Println("b-- = ", b)
d--
fmt.Println("d-- = ", d)
}
输出结果 a + b = 30 c + d = 30.245998 a - b = -10 c - d = -9.999999 a * b = 200 c * d = 203.70512 a / b = 0 c / d = 0.5030562 a % b = 10 a++ = 11 c++ = 11.123 b-- = 19 d-- = 19.123
关系运算符
运算符号
含义
==
相等
!=
不相等
<
小于
<=
小于或等于
>
大于
>=
大于或等于
package main
import "fmt"
func main() {
var a int = 10
var b int = 20
var e int = 10
var g int8 = 20
var c float32 = 10.123
var d float32 = 20.123
var f float32 = 20.123
var h float64 = 20.123
fmt.Println("a == b: ", a == b)
fmt.Println("a == e: ", a == e)
//不允许不同类型运算,需强制转换为相同数据类型
// fmt.Println("b == g: ", b == g)
fmt.Println("b == g: ", int8(b) == g)
fmt.Println("c == d: ", c == d)
fmt.Println("d == f: ", d == f)
//不允许不同类型运算,需强制转换为相同数据类型
// fmt.Println("f == h: ", f == h)
fmt.Println("f == h: ", f == float32(h))
fmt.Println("a != b: ", a != b)
fmt.Println("c != d: ", c != d)
fmt.Println("a < b: ", a < b)
fmt.Println("c < d: ", c < d)
fmt.Println("a <= e: ", a <= e)
fmt.Println("d <= f: ", d <= f)
fmt.Println("a > b: ", a > b)
fmt.Println("c > d: ", c > d)
fmt.Println("a >= e: ", a >= e)
fmt.Println("d >= f: ", d >= f)
}
输出结果 a == b: false a == e: true b == g: true c == d: false d == f: true f == h: true a != b: true c != d: true a < b: true c < d: true a <= e: true d <= f: true a > b: false c > d: false a >= e: true d >= f: true
逻辑运算符
运算符号
含义
&&
逻辑与(AND)
||
逻辑或(OR)
!
逻辑非(NOT)
package main
import "fmt"
func main() {
var a bool = true
var b bool = false
var c bool = true
var d bool = false
fmt.Println("a && b", a && b)
fmt.Println("a && c", a && c)
fmt.Println("a && d", a && d)
fmt.Println("a && b && d", a && d)
fmt.Println("a || b", a || b)
fmt.Println("a || c", a || c)
fmt.Println("b || d", b || d)
fmt.Println("a || b || d", a && d)
fmt.Println("!(a || b)", !(a || b))
fmt.Println("!(a || c)", !(a || c))
fmt.Println("!(b || d)", !(b || d))
fmt.Println("!(a || b || d)", !(a || b || d))
}
输出结果 a && b false a && c true a && d false a && b && d false a || b true a || c true b || d false a || b || d false !(a || b) false !(a || c) false !(b || d) true !(a || b || d) false
位运算符
运算符号
含义
&
按位与(AND)操作
|
按位或(OR)操作
^
按位异或(XOR)操作
<<
按位左移操作
>>
按位右移操作
package main
import (
"fmt"
"unsafe"
)
func main() {
var a int32 = 13 // 二进制赋值
var b int32 = 18
fmt.Println("int32 bit size: ", unsafe.Sizeof(a)*8)
fmt.Printf("a: %#b\n", a)
fmt.Printf("b: %#b\n", b)
fmt.Printf("a&b: %#b\n", a&b)
fmt.Printf("a|b: %#b\n", a|b)
fmt.Printf("^a: %#b\n", ^a)
fmt.Printf("^b: %#b\n", ^b)
fmt.Printf("a<<2: %#b\n", a<<1)
fmt.Printf("b<<2: %#b\n", b<<2)
fmt.Printf("a>>2: %#b\n", a>>1)
fmt.Printf("b>>2: %#b\n", b>>2)
}
package main
import (
"fmt"
)
func main() {
var a int32 = 13 // 二进制赋值
var b int32 = 18
var c int32 = a
fmt.Println("c = a: ", c)
c += b
fmt.Println("c += b: ", c)
c -= b
fmt.Println("c -= b: ", c)
c *= b
fmt.Println("c *= b: ", c)
c /= b
fmt.Println("c /= b: ", c)
c %= a
fmt.Println("c %= a: ", c)
c <<= 3
fmt.Println("c <<= 3: ", c)
c >>= 3
fmt.Println("c >>= 3: ", c)
c &= a
fmt.Printf("c &= a: %#b\n", c)
c |= b
fmt.Printf("c |= b: %#b\n", c)
c ^= a
fmt.Println("c ^= a: ", c)
}
输出结果 c = a: 13 c += b: 31 c -= b: 13 c *= b: 234 c /= b: 13 c %= a: 0 c <<= 3: 0 c >>= 3: 0 c &= a: 0b0 c |= b: 0b10010 c ^= a: 31
指针运算符
运算符号
含义
&
获取某个变量在内存中的实际地址
*
声明一个指针变量
package main
import "fmt"
func main() {
var a int = 16
var ptr *int = &a
fmt.Println("a: ", a)
fmt.Println("ptr: ", *ptr)
*ptr = 10
fmt.Println("ptr: ", *ptr)
// 指针不支持 ++ -- 操作
// ptr++
}