运算符的基本介绍
- 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
- 算数运算符
- 赋值运算符
- 比较运算符/关系运算符
- 逻辑运算符
- 位运算符
- 其它运算符
- 算数运算符
- /:如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
- %:
a%b=a-a/b*b
- ++、--:Golang的自增自减只能写在变量的后面,不能写在变量的前面,且只能独立使用,不能
a=i++
关系运算符
- 关系运算符的结果都是bool型,也就是要么是true,要么是false
- 关系表达式经常用在if结构的条件中或循环结构的条件中
逻辑运算符
- 用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个bool值
- &&也叫短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false
- ||也叫短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true
赋值运算符
- 赋值运算符就是将某个运算后的值,赋给指定的变量
- 运算顺序从右往左
- 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
位运算符
其他运算符
运算符的优先级
键盘输入语句
- fmt包的
fmt.Scanln()
或者fmt.Scanf()
fmt.Scanln()
会在换行时停止扫描,最后一个条目后必须有换行或者达到结束位置
fmt.Scanf()
从标准输入扫描文本,根据format参数指定的格式将成功读取的空白分割的值保存进
package main
import "fmt"
func main() {
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.Println("请输入薪水 ")
fmt.Scanln(&sal)
fmt.Println("请输入是否通过考试")
fmt.Scanln(&isPass)
fmt.Printf("名字是 %v \n 年龄是 %v \n 薪水是 %v \n 是否通过考试 %v \n", name, age, sal, isPass)
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)
}
进制
- 二进制转十进制:从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
- 八进制转十进制:从最低位开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
- 十六进制转十进制:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
- 十进制转二进制:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制
- 十进制转八进制:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制
- 十进制转十六进制:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制
- 二进制转八进制:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可
- 二进制转成十六进制:将二进制数每四位一组(从低位开始组合),转成对应的十六进制数即可
- 八进制转二进制:将八进制数每一位,转成对应的一个3位的二进制数即可
- 十六进制转二进制:将十六进制数每一位,转成对应的一个4位的二进制数即可
原码、反码、补码
- 对于有符号的而言:
- 二进制的最高位是符号位:0表示整数,1表示负数
- 正数的原码、反码、补码都一样
- 负数的反码=它的原码符号位不变,其它位取反
- 负数的补码=它的反码+1
- 0的反码补码都是0
- 在计算机运算的时候,都是以补码的方式来运算的
位运算符和移位运算符
- 按位与&:两位全为1,结果为1,否则为0
- 按位或|:两位有一个为1,结果为1,否则为0
- 按位异或^:两位不同为1,相同为0
- 右移运算符>>:低位溢出,符号位不变,并用符号位补溢出的高位
- 左移运算符<<:符号位不变,低位补0