Go语言中的运算符

幸运草
幸运草
幸运草
878
文章
3
评论
2020年4月22日22:01:25 评论 117

1 概述

Go语言提供了,算术,关系,逻辑,位,指针,赋值运算符。本篇整体说明一下。

2 算术运算

  • + 相加
  • - 相减
  • * 相乘
  • / 相除
  • % 求余
  • ++ 自增
  • --自减

几个细节,需要留意一下。

  • 整数与浮点数进行运算,会将整数转化为浮点数,再运算。
  • 两个整数相除,结果是整数,取整数部分。5/3 结果会是 1。
  • 求余,如果被除数或除数存在负数,那么余数与被除数保持一致。此处是求余不是取模。
  • ++/—,不区分前后,只有变量后的语法,就是 v++。同时++/—构成语句而不是表达式,意味着不能直接赋值。

3 字符串连接运算 +

+运算符,也可以完成字符串的连接运算。

"Hello" + " " + "Hank!"

4 关系运算

  • == 检查两个值是否相等
  • != 检查两个值是否不相等
  • > 检查左边值是否大于右边值
  • < 检查左边值是否小于右边值
  • >= 检查左边值是否大于等于右边值
  • <= 检查左边值是否小于等于右边值

关系运算时用于判断两个运算数的关系是否成立。返回布尔值。

5 逻辑运算

  • && 逻辑与,参与运算的两个关系必须同时成立,结果为true,否则为false
  • || 逻辑或,参与运算的两个关系成立一个(或都成立)结果为true,全部关系为false,结果为false。
  • ! 逻辑非,用于取反某个关系。非真既假,非假既真。只有一个运算数参与运算

用来判断多个关系是否成立。运算结果为:
&&
true && true = true
true && false = false
false && true = false
false && false = false
||
true || true = true
true || false = true
false || true = true
false || false = false
!
!true = false
!false = true

6 指针运算

  • & 取得变量的内存地址。pv := &v
  • * 获取指针地址对应的值。*pv
    示例为:

    v:=42
    pv:=&v
    fmt.Printf("%T(%v)", pv, pv)// *int 0xc000048b68,*int就是指针类型 值为一个类似规则的地址,就是一个号码,标识内存的一个空间区域
    fmt.Println(*pv)// 42,通过地址获取对应的变量值
    *pv ++ // 通过地址更改对应变量
    fmt.Println(*pv, v)// 42 42变量和指针操作的同一变量(内存地址)。

    Go语言的指针不可以操作。不能执行偏移这类的操作.

理解指针的几个概念:
变量:标识符与值(内存中存储空间)引用。
地址:内存中存储空间的位置(门牌号)
指针:一种类型,其值为某个地址。

一个数据(变量),我们可以通过变量标识符找到他。也可以将他的地址记录下来,通过这个地址找到他。能够记录地址的数据类型就是指针。指针通过&运算符来获取变量的地址。

7 位运算

  • & 按位与运算
  • | 按位或运算
  • ^ 按位异或运算
  • <<  左移运算符,由”<<”右边的数指定移动的位数,高位丢弃,低位补0。左移n位就是乘以2的n次方。
  • >>  右移运算符,”>>”右边的数指定移动的位数,低位舍弃,高位补0。右移n位就是除以2的n次方。

用于运算构成整数的每个二进制位,就是位上0,1的运算。

8 赋值运算

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

变量 = 表达式
=左边的变量,称之为左值。通常只能是变量。
=右边的表达式,称之为右值。表达式是右值。

自赋值运算,一些运算符,可以与赋值运算符结合,完成快捷自运算赋值,就是上面的+=….|=,逻辑是:
v += 1 相当于 v = v + 1
其他的逻辑相同!

9 运算符优先级

由高到低,列表如下:

  • ^ !
  • * / % << >> & &^
  • + - | ^
  • == != < <= >= >
  • <-
  • &&
  • ||

建议使用()小括号,明确调整优先级。

10 类型转换

类型不同的数据不能完成运算。如果需要,则要将类型转换为一致的类型。
自动转换,有些转换Go语言自动完成,例如 5/4.0 5整型会被自动转换为浮点数。
强制转换,使用语法 type(数据) 的形式转换,例如:float64(5)。

Go语言对类型要求比较严格,类型可以相互转换的场景不多,主要集中在数值上。就是要类型兼容,才可以转换。

完!

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

幸运草
Go语言中的常量 函数代码

Go语言中的常量

1 概述 常量,一经定义不可更改的量。功能角度看,当出现不需要被更改的数据时,应该使用常量进行存储,例如圆周率。从语法的角度看,使用常量可以保证数据,在整个运行期间内,不会被更改。例如当前处理器的架构...
Go语言的接口 函数代码

Go语言的接口

Go语言-接口 在Go语言中,一个接口类型总是代表着某一种类型(即所有实现它的类型)的行为。一个接口类型的声明通常会包含关键字type、类型名称、关键字interface以及由花括号包裹的若干方法声明...
Go语言支持的正则语法 函数代码

Go语言支持的正则语法

1 字符 语法 说明 . 任意字符,在单行模式(s标志)下,也可以匹配换行 字符类 否定字符类 d Perl 字符类 D 否定 Perl 字符类 ASCII 字符类 否定 ASCII 字符类 pN U...
Go语言的包管理 函数代码

Go语言的包管理

1 概述 Go 语言的源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。 2 main包 Go 语言的入口 main() 函数所在的包(pa...