运算符 - Go语言从入门到实战

运算符 - Go语言从入门到实战

算术运算符

假设A变量等于10,B变量等于20。

运算符 描述 实例
+ 相加 A + B 输出结果 30
- 相减 A - B 输出结果 -10
* 相乘 A * B 输出结果 200
/ 相除 B / A 输出结果 2
% 求余 B % A 输出结果 0
++ ⾃增 A++ 输出结果 11
⾃减 A-- 输出结果 9

特性:Go 语⾔没有前置的 ++,–。不允许 ++a 这种写法,Go语言遵循更严格的语法规则,不允许在变量名之前直接使用++或–。如果你想增加或减少一个变量的值,必须使用赋值运算符(如+=或-=)或者是普通的加法或减法运算符。可以写成a = a + 1或者a += 1。

⽐较运算符

操作符 检查两个值是否相等 示例结果
== 检查两个值是否相等,如果相等返回 True,否则返回 False。 False
!= 检查两个值是否不相等,如果不相等返回 True,否则返回 False。 True
> 检查左边值是否大于右边值,如果左边值大于右边值返回 True,否则返回 False。 False
< 检查左边值是否小于右边值,如果左边值小于右边值返回 True,否则返回 False。 True
>= 检查左边值是否大于或等于右边值,如果左边值大于或等于右边值返回 True,否则返回 False。 False
<= 检查左边值是否小于或等于右边值,如果左边值小于或等于右边值返回 True,否则返回 False。 True

这些比较简单,拎一个讲讲:
⽤ == ⽐较数组

  1. 相同维数且含有相同个数元素的数组才可以⽐较
  2. 每个元素都相同的才相等
package main  
import "fmt"  
func main() {  
    array1 := [3]int{1, 2, 3}  
    array2 := [3]int{1, 2, 3}  
    array3 := [3]int{4, 5, 6}  
    array4 := [3]int{4, 5, '6'}  
  
    fmt.Println(array1 == array2) // 输出: true  
    fmt.Println(array1 == array3) // 输出: false  
    fmt.Println(array3 == array4) // 输出: false  
}

逻辑运算符

运算符 描述 实例
&& 逻辑 AND 运算符。如果两边的操作数都是 True,则条件 True,否则为 False。 (A && B) 为 False
|| 逻辑 OR 运算符 。如果两边的操作数有⼀个 True,则条件 True,否则为 False。 (A || B) 为 True
! 逻辑 NOT 运算符 。如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !(A && B) 为 True

位运算符

运算符 描述 实例
& 按位与运算符"&"是双⽬运算符。 其功能是参与运算的两数各对应的⼆进位相与。 (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

与其他主要编程语⾔的差异

&^ 按位置零
1 &^ 0 – 1
1 &^ 1 – 0
0 &^ 1 – 0
0 &^ 0 – 0

package operator_test
import "testing"

const (
	Readable = 1 << iota
	Writable
	Executable
)

func TestCompareArray(t *testing.T) {
	a := [...]int{1, 2, 3, 4}
	b := [...]int{1, 3, 2, 4}
	//	c := [...]int{1, 2, 3, 4, 5}
	d := [...]int{1, 2, 3, 4}
	t.Log(a == b)
	//t.Log(a == c)
	t.Log(a == d)
}

func TestBitClear(t *testing.T) {
	a := 7 //0111
	a = a &^ Readable
	a = a &^ Executable
	t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable)
}

可能这里会对十进制数转二进制数有疑惑,举个例子:

将一个十进制数转换为二进制数,可以使用以下方法:

  1. 将十进制数除以 2,得到商和余数。
  2. 将商再次除以 2,得到新的商和余数。
  3. 不断重复上述步骤,直到商为 0。
  4. 将每一步的余数从低位到高位依次排列,得到二进制表示。

下面是将十进制数 61 转换为二进制数的步骤:

  1. 61 ÷ 2 = 30 余 1
  2. 30 ÷ 2 = 15 余 0
  3. 15 ÷ 2 = 7 余 1
  4. 7 ÷ 2 = 3 余 1
  5. 3 ÷ 2 = 1 余 1
  6. 1 ÷ 2 = 0 余 1

将每一步的余数从低位到高位依次排列,得到 61 的二进制表示为 0011 1101或111101。


学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。

欢迎关注云尔Websites CSDN博客

你可能感兴趣的:(GO语言从入门到实战,golang,开发语言,后端,go语言,GO语言从入门到实战)