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.复合赋值运算符等价于下面的效果
运算符的优先级
运算符的优先级一览表
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序,如右表,上一行运算符总先于下一行。
- 只有单目运算符,赋值运算符是从右向左运算的
- 大致的顺序整理
- 括号
- 单目运算
- 算数运算
- 位移运算
- 关系运算
- 位运算
- 逻辑运算符
- 赋值运算符
- 逗号
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
步骤
- 导入fmt包
- 调用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句话
对于有符号的而言:
- 二进制的最高位是符号位:0表示正数,1表示负数
1===》[0000 0001] -1===>[1000 0001] - 正数的原码,反码,补码都一样
- 负数的反码=他的原码符号位不变,其他位取反(0->1,1->0)
1===> 原码[0000 0001] 反码[0000 0001] 补码 [0000 0001]
-1===> 原码[0000 0001] 反码[1111 1110] 补码[1111 1111] - 负数的补码=它的反码+1
- 0的反码,补码都是0
- 在计算机运算的时候,都是以补码的方式来运算的
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运算符介绍的主要内容,如果未能解决你的问题,请参考以下文章