Go 语言学习手札 ━━ 运算符

一、算术运算符

  • +:添加两个操作数 A + B
  • -:从第一个操作数中减去第二个操作数 A – B
  • *:将两个操作数相乘 A * B
  • /:将分子除以分母 B / A
  • %:模数运算符,整数除法的余数 B % A
  • ++:增加(递增)运算符,将整数值加 1 A++
  • --:相减(递减)运算符,将整数值减 1 A–

在 Go 语言中 ++-- 操作只能将操作运算符放到值的后面,也就是说只能实现 a++a-- 操作,不允许 ++a--a。也不允许用作为赋值语句,如: a = a++

二、关系运算符

  • ==:检查两个值是否相等,如果相等返回 True 否则返回 False。
  • !=:检查两个值是否不相等,如果不相等返回 True 否则返回 False。
  • >:检查左边值是否大于右边值,如果是返回 True 否则返回 False。
  • <:检查左边值是否小于右边值,如果是返回 True 否则返回 False。
  • >=:检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
  • <=:检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。

与 PHP 不同的是,在 Go 语言中,不存在 ===!== 操作。

三、逻辑运算符

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

四、按位运算符

  • &:按位与运算符”&”是双目运算符。 其功能是参与运算的两数各对应的二进位相与。
  • |:按位或运算符”|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或
  • ^:按位异或运算符”^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
  • <<:左移运算符”<<“是双目运算符。左移n位就是乘以2的n次方。 其功能把”<<“左边的运算数的各二进位全部左移若干位,由”<<“右边的数指定移动的位数,高位丢弃,低位补0。
  • >>:右移运算符”>>”是双目运算符。右移n位就是除以2的n次方。 其功能是把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数。

五、赋值运算符

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

例:

package main

import "fmt"

func main() {
   var a int = 21
   var c int

   c =  a
   fmt.Printf("第 1 行 - =  运算符实例,c 值为 = %d\n", c )

   c +=  a
   fmt.Printf("第 2 行 - += 运算符实例,c 值为 = %d\n", c )

   c -=  a
   fmt.Printf("第 3 行 - -= 运算符实例,c 值为 = %d\n", c )

   c *=  a
   fmt.Printf("第 4 行 - *= 运算符实例,c 值为 = %d\n", c )

   c /=  a
   fmt.Printf("第 5 行 - /= 运算符实例,c 值为 = %d\n", c )

   c  = 200;

   c <<=  2
   fmt.Printf("第 6行  - <<= 运算符实例,c 值为 = %d\n", c )

   c >>=  2
   fmt.Printf("第 7 行 - >>= 运算符实例,c 值为 = %d\n", c )

   c &amp;=  2
   fmt.Printf("第 8 行 - &amp;= 运算符实例,c 值为 = %d\n", c )

   c ^=  2
   fmt.Printf("第 9 行 - ^= 运算符实例,c 值为 = %d\n", c )

   c |=  2
   fmt.Printf("第 10 行 - |= 运算符实例,c 值为 = %d\n", c )

}

六、其他运算符

  • &:返回变量存储地址,如:&a 将给出变量的实际地址。
  • *:指针变量,如:*a 是一个指针变量

例:

package main

import "fmt"

func main() {
   var a int = 4
   var b int32
   var c float32
   var ptr *int

   /* 运算符实例 */
   fmt.Printf("第 1 行 - a 变量类型为 = %T\n", a );
   fmt.Printf("第 2 行 - b 变量类型为 = %T\n", b );
   fmt.Printf("第 3 行 - c 变量类型为 = %T\n", c );

   /*  &amp; 和 * 运算符实例 */
   ptr = &amp;a     /* 'ptr' 包含了 'a' 变量的地址 */
   fmt.Printf("a 的值为  %d\n", a);
   fmt.Printf("*ptr 为 %d\n", *ptr);
}

七、运算符的优先级

5*, /, %, <<, >>, &, &^
4+, -, |, ^
3==, !=, <, <=, >,>=`
2&&
1||
标签:

About: Mr.zhang

成谜于写 bug 无法自拔~


发表评论

邮箱地址不会被公开。 必填项已用*标注