慈溪公司做网站,网站开发的职业分析,深圳网站制作必选祥奔科技,蓝色企业网站Go学习第三章——运算符与进制 1 算术运算符2 关系运算符3 逻辑运算符4 赋值运算符5 其他运算符5.1 位运算符5.2 跟指针有关的运算符 6 运算符的优先级7 获取用户终端输入8 进制转换8.1 进制基本使用8.2 进制之间的转换8.3 原码 反码 补码8.4 位运算符详解 运算符是—种特殊的符… Go学习第三章——运算符与进制 1 算术运算符2 关系运算符3 逻辑运算符4 赋值运算符5 其他运算符5.1 位运算符5.2 跟指针有关的运算符 6 运算符的优先级7 获取用户终端输入8 进制转换8.1 进制基本使用8.2 进制之间的转换8.3 原码 反码 补码8.4 位运算符详解 运算符是—种特殊的符号用以表示数据的运算、赋值和比较等 ps没有三元运算符
1 算术运算符
算术运算符 -*/%–介绍算术运算符是对数值类型的变量进行运算的比如加减乘除。细节说明
当对一个数取模时可以等价a%ba-a/b*b这样就是取模的本质运算Golang的自增自减只能当作一个独立的语言使用不能这样使用b : a或者b : a--Golang的和–只能写在变量的后面不能卸载变量的前面即只有a a--没有a --aGolang的设计者去掉c/java中的自增自减容易混淆的写法让Golang更加简洁统一。
例子演示
func main() {var i int 8var a int//a i // 错误//a i-- // 错误// 下面这个做法也是错的/*if i 0 {fmt.Println(ok)}*/ia ifmt.Println(a的值, a)//--i // 错误i--a ifmt.Println(a的值, a)
}输出
a的值 9
a的值 8课堂练习
func main() {// 假如还有97天放假问xx个星期零xx天var days int 97var week int days / 7var day int days % 7fmt.Printf(%d个星期零%d天\n, week, day)// 定义一个变量保存华氏温度// 华氏温度转换摄氏温度的公式为5/9*(华氏温度-100)求出华氏温度对应的摄氏温度。var huashi float32 134.2var sheshi float32 5.0 / 9 * (huashi - 100)fmt.Printf(%v 对应的摄氏温度%v \n, huashi, sheshi)
}输出
13个星期零6天
134.2 对应的摄氏温度192 关系运算符
关系运算符:,!,,, 关系运算符的结果都是bool型也就是要么是true要么是false关系表达式经常用在流程控制中
例子演示
func main() {fmt.Println(5 9) //判断左右两侧的值是否相等相等返回true不相等返回的是false 不是fmt.Println(5 ! 9) //判断不等于fmt.Println(5 9)fmt.Println(5 9)fmt.Println(5 9)fmt.Println(5 9)
}输出
false
true
false
true
false
true3 逻辑运算符
逻辑运算符:(逻辑与/短路与)||逻辑或/短路或!逻辑非
与逻辑 :两个数值/表达式只要有一侧是false结果一定为false 也叫短路与只要第一个数值/表达式的结果是false那么后面的表达式等就不用运算了直接结果就是false
或逻辑||:两个数值/表达式只要有一侧是true结果一定为true 也叫短路或只要第一个数值/表达式的结果是true后面的表达式等就不用运算直接就是true --提高运算效率
非逻辑!:逻辑非运算符!true就是false!false就是true
例子演示
func main() {var age int 40fmt.Println(逻辑与(一边为false), age 35 age 40)fmt.Println(逻辑与(一边为true), age 35 age 40)fmt.Println(逻辑与(两边为true), age 35 age 40)fmt.Println(逻辑与(两边为false), age 35 age 40)fmt.Println()fmt.Println(逻辑或(一边为false), age 35 || age 40)fmt.Println(逻辑或(一边为true), age 35 || age 40)fmt.Println(逻辑或(两边为true), age 35 || age 40)fmt.Println(逻辑或(两边为false), age 35 || age 40)fmt.Println()// 短路只要第一个数值为true后面的表达式不用运算直接就是true// 所以会发现输出的地方并没有打印testfmt.Println(逻辑或(一边为true), age 35 || test())
}输出
逻辑与(一边为false) false
逻辑与(一边为true) false
逻辑与(两边为true) true
逻辑与(两边为false) false逻辑或(一边为false) true
逻辑或(一边为true) true
逻辑或(两边为true) true
逻辑或(两边为false) true逻辑或(一边为true) true4 赋值运算符
赋值运算符:,-*/,%赋值运算符就是将某个运算后的值赋给指定的变量。
例子演示
func main() {var a int 10var b int 1fmt.Println(ba前b, b)b afmt.Println(ba后b, b)fmt.Println()fmt.Println(b-a前b, b)b - afmt.Println(b-a后b, b)fmt.Println()fmt.Println(b*a前b, b)b * afmt.Println(b*a后b, b)fmt.Println()fmt.Println(b/a前b, b)b / afmt.Println(b/a后b, b)fmt.Println()fmt.Println(b%a前b, b)b % afmt.Println(b%a后b, b)
}输出
ba前b 1
ba后b 11b-a前b 11
b-a后b 1b*a前b 1
b*a后b 10b/a前b 10
b/a后b 1b%a前b 1
b%a后b 1赋值运算符的特点
运算顺序从右往左赋值运算符的左边只能是变量右边可以是变量、表达式、常量值复合赋值运算符等价于下面的效果比如a3 等价于 aa 3
5 其他运算符
5.1 位运算符 5.2 跟指针有关的运算符 返回变量的存储地址 *取指针变量对应的数值
func main() {var age int 18fmt.Println(age对应的存储空间的地址为, age) //age对应的存储空间的地址为 0xc0000100b0var ptr *int agefmt.Println(ptr对应的存储空间的地址为, ptr)fmt.Println(ptr这个指针指向的具体数值为, *ptr)
}输出
age对应的存储空间的地址为 0x980a0b8
ptr对应的存储空间的地址为 0x980a0b8
ptr这个指针指向的具体数值为 186 运算符的优先级
Go语言有几十种运算符被分成十几个级别有的运算符优先级不同有的运算符优先级相同请看下表。
逗号的优先级是最低括号后缀运算符优先级最高 为了提高优先级就加()括号
7 获取用户终端输入
在编程中需要接收用户输入的数据就可以使用键盘输入语句来获取。
有两种方式可以获取到键盘的输入
**fmt.Scanln(a … interface{}) **在换行的时候停止也就是获取一行的数据
**fmt.Scanf(format string, a … interface{}) **根据格式把值传到变量里面
案例演示
要求可以从控制台接收用户信息【姓名年龄薪水是否通过考试】
方式一使用fmt.Scanln()
func main() {var name stringvar age bytevar sale float32var isPass bool//方式一使用fmt.Scanln()// 注意只用使用name才会影响到这个name的值fmt.Println(请输入姓名 )// 当执行程序到这里程序会停止在这里等到用户输入并回车fmt.Scanln(name)fmt.Println(请输入年龄 )fmt.Scanln(age)fmt.Println(请输入薪水 )fmt.Scanln(sale)fmt.Println(请输入是否通过考试 )// 如果你输入是返回的会是bool类型的默认值falsefmt.Scanln(isPass)fmt.Printf(名字是 %v年龄是 %v薪水是 %v是否通过考试 %v 。, name, age, sale, isPass)
}输出
请输入姓名
小智
请输入年龄
18
请输入薪水
11111
请输入是否通过考试
true
名字是 小陈年龄是 18薪水是 11111是否通过考试 true 。方式二使用fmt.Scanf()
func main() {var name stringvar age bytevar sale float32var isPass bool//方式二使用fmt.Scanf()可以按照指定的格式输入fmt.Println(请输入你的姓名年龄薪水是否通过考试使用空格隔开)fmt.Scanf(%s %d %f %t, name, age, sale, isPass)fmt.Printf(名字是 %v年龄是 %v薪水是 %v是否通过考试 %v 。, name, age, sale, isPass)
}输出
请输入你的姓名年龄薪水是否通过考试使用空格隔开
小智 18 11111 true
名字是 小智年龄是 18薪水是 11111是否通过考试 true 。8 进制转换
8.1 进制基本使用
对于整数有四种表示方式
二进制0,1 满 2 进 1。 在 golang 中不能直接使用二进制来表示一个整数它沿用了 c 的特点。十进制0-9 满 10 进 1。八进制0-7 满 8 进 1. 以数字 0 开头表示。十六进制0-9 及 A-F满 16 进 1. 以 0x 或 0X 开头表示。 此处的 A-F 不区分大小写。
func main() {var num int 5// 二进制输出fmt.Printf(num的二进制%b \n, num)// 八进制var num8 int 011fmt.Println(八进制011的十进制值, num8)// 十六进制var num16 int 0x11fmt.Println(十六进制011的十进制值, num16)
}输出
num的二进制101
八进制011的十进制值 9
十六进制011的十进制值 178.2 进制之间的转换
略~~~~这里就不写了网上大把
8.3 原码 反码 补码
略~~~~这里也不写了网上大把
8.4 位运算符详解 按位与运算符
| 按位或运算符
^ 按位异或运算符 移位运算符
Golang中有2个移位运算符、 右移和左移运算规则
右移运算符 低位溢出符号位不变并用符号位补溢出的高位
左移运算符 符号位不变低位补0
案例演示
func main() {a : 10 // 十进制10二进制1010// 输出 10 1 2010的二进制1010向左移1位是10100即十进制的20fmt.Printf(%d %d %d\n, a, 1, a1)var b uint8 255 // 返回的类型是无符号整型 255的二进制是11111111// 输出 255 1 12711111111向右移动一位变成01111111十进制为127fmt.Printf(%d %d %d\n, b, 1, b1)
}输出
10 1 20
255 1 127第三章结束啦~~~冲冲冲接着学