Golang运算符介绍

Posted 2019ab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang运算符介绍相关的知识,希望对你有一定的参考价值。

4.1 运算符的基本介绍

运算符是一种特殊的符号,可以表示数据的运算,赋值和比较等

1.算数运算符
2.赋值运算符
3.比较运算符、关系运算符
4. 逻辑运算符
5. 位运算符
6. 其他运算符

4.2 算数运算符

运算符是对数值类型的变量进行运算的,比如,加减乘除。在Go中使用非常多

算数运算符的一览表

案例演示
+,-,*,/,%,++,-- 重点讲解 /,%
自增:++
自减:–
演示:/ 的使用特点

package main 
import (
	"fmt"
)
func main()
  // 重点讲解 /,%
  // 说明:如果运算的数都是整数,那么除之后,去掉小数部分,保留整数部分
  fmt.Println(10/4)
  var n1 float32 = 10/4
  fmt.Println(n1)

  // 如果我们希望保留小数部分,则需要有浮点数参与运算
  var n2 float32 = 10.0/4
  fmt.Println(n2)
 
  // 演示 %的使用
  // 看一个公式 a%b = a-a / b*b
  fmt.Println("10%3=",10%3) //1
  fmt.Println("-10%3=",10%3) //-1
  fmt.Println("10%-3=",10%3) //1
  fmt.Println("-10%-3=",10%3) //-1

  // ++ 和 -- 的使用
  var i int = 10
  i++ // 等价于 i = i+1
  fmt.Println("i=",i) // 11
  i=-- // 等价于 i = i-1
  fmt.Println("i=",i) // 10

%的使用

  // 看一个公式 a%b = a-a / b*b
  fmt.Println("10%3=",10%3) //1
  fmt.Println("-10%3=",10%3) //-1
  fmt.Println("10%-3=",10%3) //1
  fmt.Println("-10%-3=",10%3) //-1

++和–的使用

  // ++ 和 -- 的使用
  var i int = 10
  i++ // 等价于 i = i+1
  fmt.Println("i=",i) // 11
  i=-- // 等价于 i = i-1
  fmt.Println("i=",i) // 10

算数运算符的使用事项

1.对于除号“/”,它的整数除和小数除是有区别的,整数之间做除法时,只停留整数部分而舍弃小数部分。例如:x=19/5,结果是3
2.当对一个数取模时,可以等价于a%b=a-a/b*b,这样我们可以看到取模的一个本质运算
3.Golang的自增自减只能当做一个独立语言使用时,不能这样使用
4.Golang的++和–只能写在变量的后面,不能写在变量的前面,即:a++ a–没有++a --a
5.Golang的设计者去掉c/java中的自增和自减的容易混淆的写法,让Golang更加简洁,统一。

练习

1.加入还有97天放假,问:xx个星期零几天

var days int 97
var week int = days / 7
var day int = days % 7
fmt.Printf("%d个星期零%d天\\n",week,day)

2.定义一个变量保存华氏温度,华氏温度转换摄氏度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。

var huashi float32 = 134.2
var sheshi float32 = 5.0/9*(huashi-100)
fmt.Printf("%v 对应的摄氏温度=%v \\n",huashi,sheshi)

4.3 关系运算符(比较运算符)

基本介绍
1.关系运算符的结果都是bool型,也就是要么是false
2.关系表达式 经常用在 if结构的条件中或循环结构的条件中

关系运算符一览表图


关系运算符的细节说明

1.关系运算符的结果都是bool型,也就是要么是true,要么是false
2.关系运算符组成的表达式,我们称为关系表达式:a>b
3.比较运算符“==” 不能误写成“=”

4.4 逻辑运算符

基本介绍

用于连接多个条件(一般来讲是关系表达式),最终的结果也是一个bool值

逻辑运算符的说明


注意事项和细节说明

1.&&也叫短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false
2.|| 也叫短路或:如果第一个条件为true,则第二个条件不会判断,最终为true

4.5 赋值运算符

基本介绍

赋值运算就是讲某个运算后的值,赋值给指定的变量

分类



赋值运算符的特点

1.运算顺序从左到右
2.赋值运算符的左边 只能是变量,右边 可以是变量,表达式,常量值
3.复合赋值运算符等价于下面的效果

运算符的优先级
运算符的优先级一览表

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序,如右表,上一行运算符总先于下一行。
  2. 只有单目运算符,赋值运算符是从右向左运算的
  3. 大致的顺序整理
  • 括号
  • 单目运算
  • 算数运算
  • 位移运算
  • 关系运算
  • 位运算
  • 逻辑运算符
  • 赋值运算符
  • 逗号

4.6 位运算符

4.7 其他运算符


例子

import (
  “fmt”
)
func main()
  // &和*的使用
  a := 100
  fmt.Println("a 的地址="&a)
  
  var ptr *int = &a
  fmt.Println("ptr 指向的地址是=",*ptr)

说明

Go语言中不支持三元运算符,解决方法(使用if else判断去)

4.10 键盘输入语句

介绍

在编程中,需要接受用户输入的数据,就可以使用键盘输入语句来获取,InputDemo.go

步骤

  1. 导入fmt包
  2. 调用fmt包的fmt.Scanln() 或者 fmt.Scanf()
  • 使用fmt.Scanln()获取
var name string
var age byte
var sal float32
var isPass bool

fmt.Println("请输入姓名 ")
// 当程序执行到 fmt.Scanln(&name),程序会停止在这里,等待用户输入,并回车
fmt.Scanln(&name)
fmt.Println("请输入年龄 ")
fmt.Scanln(&age)
fmt.Pringtln("请输入薪水 ")
fmt.Scanln(&sal)

fmt.Println("请输入是否通过考试 ")
fmt.Scanln(&isPass)

fmt.Printf("名字是 %v \\n 年龄是 %v \\n 薪水是 %v \\n 是否通过考试 %v \\n",name,age,sal,isPass)
  • 使用fmt.Scanf()获取 格式化
// 方式二可以按照指定的格式输出
fmt.Println("请输入你的姓名,年龄,薪水,是否通过考试,使用空格隔开")
fmt.Scanf("%s %d %f %t",&name,&age,&sal,&isPass)
fmt.Printf("名字是 %v \\n 年龄是 %v \\n 薪水是 %v \\n 是否通过考试 %v \\n",name,age,sal,isPass)

4.11 进制的转换

1. 第一组 (其他进制转十进制)

  • 规则:从低位开始(右边的),将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
  • 案例:请将二进制:1011转成十进制的数 (1011 = 1 * 1 + 12 + 022 + 1222 = 1+2+0+8=11)

* 规则:从最低位开始(右边的),将每个位上的数提取出来,乘以8的(位数-1)次方 * 案例:将0123转换成十进制的数 * 0123 = 3*1 + 2*8 + 1*8*8 = 3+16+64 = 83
* 规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。 * 案例:请将0x34A转成十进制的数 * 0x34A = 10*1 + 4*16 + 3*16*16 = 10 + 64 + 768 = 842

2. 第二组(十进制转其他进制)

  • 十进制转换成二进制
  • 规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制
  • 案例:将56转换成二进制 111000

3. 第三组(二进制转其他进制)

  • 二进制转换成八进制
  • 规则:将二进制数每三位一组(从低位开始组合),转换成对应的八进制数即可
  • 案例:请将二进制:11010101转换成八进制

* 二进制转换为十六进制 * 规则:将二进制数每四位一组(从低位开始组合),转换成对应的十六进制即可。 * 11010101 = 0xD5

4. 第四组(其他进制转二进制)

  • 八进制转成二进制
  • 规则:将八进制数每一位,转成对应的一个三位的二进制数即可
  • 案例:将0237转换为二进制
  • 0237 = 10 011 111

  • 十六进制转换成二进制
  • 规则:将十六进制数每一位,转成对应的一个4位的二进制数即可。
  • 案例:将0x237转成二进制
  • 0x237 = 10 0011 0111

4.12 位运算

二进制是逢2进位的进位制,0,1是基本算符

现代的电子计算机技术全部采用的是二进制,因为他只使用0,1两个数字符号,非常简单方便。易于用电子方式实现,计算机内部处理的信息。都是采用二进制数来表示的,二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至做的次序,这个值以二倍递增。

原码,反码,补码

网上对原码,反码,补码的解释过于复杂,我这里精简6句话

对于有符号的而言:

  1. 二进制的最高位是符号位:0表示正数,1表示负数
    1===》[0000 0001] -1===>[1000 0001]
  2. 正数的原码,反码,补码都一样
  3. 负数的反码=他的原码符号位不变,其他位取反(0->1,1->0)
    1===> 原码[0000 0001] 反码[0000 0001] 补码 [0000 0001]
    -1===> 原码[0000 0001] 反码[1111 1110] 补码[1111 1111]
  4. 负数的补码=它的反码+1
  5. 0的反码,补码都是0
  6. 在计算机运算的时候,都是以补码的方式来运算的
    1+1 1-1 = 1+(-1)

4.12 位运算符和位移运算符

Golang中有3个位运算符
分别是“按位与&,按位或|,按位异或^,他们的规则是”
按位与&:两个全为1,结果为1,否则为0
按位或|: 两个有一个为1,结果为1,否则为0
按位异或^:两位一个为0,一个为1,结果为1,否则为0


Golang中有2个移位运算:
( >>,<< )右移和左移,运算规则:
右移运算>>:低位溢出,符号位不变,并用符号位补溢出的高位
左移运算<<:符号位不变,低位补0

案例演示
a :=1 >> 2 // 0000 0001 => 0000 0000 = 0
c := 1<<2 // 0000 0001 => 0000 0100 = 4

感谢大家观看,我们下次见

以上是关于Golang运算符介绍的主要内容,如果未能解决你的问题,请参考以下文章

Golang运算符介绍

Golang运算符介绍

hashCode()和hash算法的那些事儿

基数排序(数字排序和英文字母排序)

守形数

排序算法——基数排序