Go语言中的运算符

hanzkering · · 3380 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

## 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语言对类型要求比较严格,类型可以相互转换的场景不多,主要集中在数值上。就是要类型兼容,才可以转换。 完! 原文出自:[小韩说课](http://www.hellokang.net/go/go-operator/) 微信关注:小韩说课 ![小韩说课](http://www.hellokang.net/images/wechat_subscription.jpg)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

3380 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传