4.1 运算符的基本介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等,有算术运算符、赋值运算符、比较运算符/关系运算符、逻辑运算符、位运算符、其他运算符。
4.1.1 算术运算符
运算符 | 运算 | 范例 | 结果 |
---|
+ | 正号 | +3 | 3 |
- | 负号 | -4 | -4 |
+ | 加 | 5 + 5 | 10 |
- | 减 | 6 - 4 | 2 |
* | 乘 | 3 * 4 | 12 |
/ | 除 | 5 / 5 | 1 |
% | 取模(取余) | 7 % 5 | 2 |
++ | 自增 | a=2 a++ | a=3 |
– | 自减 | a=2 a– | a=1 |
+ | 字符串相加 | “he” + “llo” | “hello” |
- 注意事项
- 对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。如:x:=19/5结果是3。
- 当对一个数取模时,可以等价a%b=a-a/b*b
- Go自增自减只能当做一个独立语言使用,不能写成
a = i++
,if i++ >0
这种 - Go的++和–只能写在变量的后面,不能写在变量的前面
- Go的设计者去掉c/java的自增自减容易混淆的写法
4.1.2 关系运算符(比较运算符)
运算符 | 运算 | 范例 | 结果 |
---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
- 注意事项
- 关系运算符的结果都是bool型,也就是要么true,要么false
- 关系运算符组成的表达式,称为关系表达式
4.1.3 逻辑运算符
运算符 | 描述 |
---|
&& | 逻辑与运算符 |
|| | 逻辑或运算符 |
! | 逻辑非运算法 |
- 注意事项
- &&也叫短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false
- ||也叫短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true
4.1.4 赋值运算法
运算符 | 描述 |
---|
= | 将表达式的值赋给一个左值 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
^= | 按位异或后赋值 |
|= | 按位或后赋值 |
- 注意事项
- 运算顺序从右往左
- 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
4.1.5 位运算符
运算符 | 描述 |
---|
& | 按位与运算符是双目运算符,其功能是参与运算的两数各自对应的二进制相与。 |
| | 按位或运算符是双目运算符,其功能是参与运算的两数各自对应的二进制相或。 |
^ | 按位异或运算符是双目运算符,其功能是参与运算的两数各自对应的二进制相异或。 |
<< | 左移运算符是双目运算符,其功能把<<左边的运算数的各二进制全部左移若干位,高位丢弃,低位补0。左移n为就是乘以2的n次方。 |
>> | 右移运算符是双目运算符,其功能把>>左边的运算数的各二进制全部右移若干位,低位溢出,符号位不变,并用符号位补溢出的高位。右移n为就是除以2的n次方。 |
4.1.6 其他运算符
运算符 | 描述 | 实例 |
---|
& | 返回变量存储地址 | &a:将给出变量的实际地址 |
* | 指针变量 | *a:是一个指针变量 |
4.1.7 运算符的优先级
4.2 键盘输入语句
- 步骤
- 导入fmt包
- 调用fmt包的fmt.Scanln()或fmt.Scanf()函数
- func Scanln(a …interface{}) (n int, err error):类似Scan,但会在换行时才停止扫描,最后一个条目后必须有换行或者到达结束位置。
- func Scanf(format string, a …interface{}) ( n int, err error):Scanf从标准输入扫描文本,根据format参数指定的格式将成功读取的空白分割的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。
package main
import "fmt"
func main() {
var name string
var age int
var sal float32
var isPass bool
fmt.Println("请输入姓名:")
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)
}