Golang 运算符

一、算术运算符

运算符描述
+相加
-相减
*相乘
/相除
%求余

代码示例:

package main

import "fmt"

func main() {
	// 算术运算符
	a := 5
	b := 2

	fmt.Printf("a+b=%v\n", a+b) // a+b=7
	fmt.Printf("a-b=%v\n", a-b) // a-b=3
	fmt.Printf("a*b=%v\n", a*b) // a*b=10
	fmt.Printf("a/b=%v\n", a/b) // a/b=2
	fmt.Printf("a%%b=%v\n", a%b) // a%b=1 想要打印%号,可以用%转义,即 %%
}

注意: ++(自增)和 --(自减)在Go语言中是单独的语句,并不是运算符。

package main

import "fmt"

func main() {
	a := 5
	b := 2
    
	if a > 4 {
		a++
	} else {
		a--
	}
	fmt.Print(a)
}

二、关系运算符

运算符描述
==检查两个值是否相等,如果相等返回 True 否则返回 False。
!=检查两个值是否不相等,如果不相等返回 True 否则返回 False。
>检查左边值是否大于右边值,如果是返回 True 否则返回 False。
>=检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
<检查左边值是否小于右边值,如果是返回 True 否则返回 False。
<=检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。
package main

import "fmt"

func main() {
	a := 5
	b := 2

	fmt.Println(a == b) // false
	fmt.Println(a != b) // true
	fmt.Println(a > b)  // true
	fmt.Println(a >= b) // true
	fmt.Println(a < b)  // false
	fmt.Println(a <= b) // false
}

三、逻辑运算符

运算符描述
&&逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。
||逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。
!逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。
package main

import "fmt"

func main() {
	a := 5
	b := 2
	c := 3

	fmt.Println(a > b && c > b) // true
	fmt.Println(a < b && c > b) // false

	fmt.Println(a > b || c > b) // true
	fmt.Println(a < b || c < b) // false

	fmt.Println(!(a > b)) // false
}

四、位运算符

位运算符对整数在内存中的二进制位进行操作

运算符描述
&参与运算的两数各对应的二进位相与。 (两位均为1才为1)
|参与运算的两数各对应的二进位相或。 (两位有一个为1就为1)
^参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1)
<<左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
>>右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。
package main

import "fmt"

func main() {
	a := 5 // 0101
	b := 6 // 0110

	fmt.Println(a & b)  // 4
	fmt.Println(a | b)  // 7
	fmt.Println(a ^ b)  // 3
	fmt.Println(a >> 1) // 2
	fmt.Println(a << 1) // 10
}

分析

a --转换成二进制--> 0101
b -- 转换成二进制--> 0110
             0101
a & b --->   0110 
           --------
             0100  ---> 转换成十进制为 4
         
             0101
a | b --->   0110 
           --------
             0111  ---> 转换成十进制为 7

             0101
a ^ b --->   0110 
           --------
             0011  ---> 转换成十进制为 3
             
a >> 1 ---> 0101 ---> 所有位向右(后)移动一位,在最前面补0 ---> 0010  ---> 转换成十进制 2

a << 1 ---> 0101 ---> 所有位向左(前)移动一位,在最后面补0 ---> 1010  ---> 转换成十进制 10

注意,对于位的移动操作,如果超过原本数据类型的长度,只会从后往前保留对应的位数,如:

package main

import "fmt"

func main() {
	a := int8(1) // 定义一个八位的整数
	fmt.Println(a << 10) // 0
}

分析

a<<1 ---> 00000001 ---> 所有位向左移动十位在最后面补0 ---> 10000000000 ---> 但是a最长只能是八位,多以只能从右往左保留八位,00000000,转换成十进制结果为0

示例:有一堆数字,如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?

思路:可以使用异或运算操作,0 与任何数值异或的结果都为值本身,相同的值异或结果为 0

package main

import "fmt"

func main() {
	nums := [...]int{1, 1, 2, 3, 2}
	obj := 0
	for _, v := range nums {
		obj ^= v
	}
	fmt.Println(obj)
}

五、赋值运算符

运算符描述
=简单的赋值运算符,将一个表达式的值赋给一个左值
+=相加后再赋值
-=相减后再赋值
*=相乘后再赋值
/=相除后再赋值
%=求余后再赋值
<<=左移后赋值
>>=右移后赋值
&=按位与后赋值
|=按位或后赋值
^=按位异或后赋值
package main

import "fmt"

func main() {
	a := 5

	var b int
	b = a
	fmt.Println(b)

	a += 2 // a = a + 2
	a -= 2 // a = a - 2
	a *= 2 // a = a * 2
	a /= 2 // a = a / 2
	a %= 2 // a = a % 2
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值