4.1. 算术运算符与类型转换
算术运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
+ | 加 | 10 + 5 | 15 |
- | 减 | 10 - 5 | 5 |
* | 乘 | 10 * 5 | 50 |
/ | 除 | 10 / 5 | 2 |
% | 取模(取余) | 10 % 3 | 1 |
++ | 后自增,没有前自增 | a=0; a++ | a=1 |
-- | 后自减,没有前自减 | a=2; a-- | a=1 |
加减乘除
func main() {
a := 10
b := 5
fmt.Println(a + b) //30
fmt.Println(a - b) //-10
fmt.Println(a * b) //200
//两个整数相除等到的结果也是整型
//在除法计算时 除数不能为0
fmt.Println(a / b) //???0
取余运算
func main() {
a := 10
b := 2
//取余运算符除数不能为0
//取余运算符不能对浮点型使用
c := a % b
fmt.Println(c)
}
自增 自减操作
注意:GO语言中没有前自增,这是与其它编程语言不同的地方。
func main() {
//自增自减运算符
//可以对浮点型进行自增自减运算 但是不能对常量进行自增自减运算
a := 10
//const a =10
//a = a + 1
//a++//自增 在变量本身加一
//a--//自减
//自增自减不能出现在表达式中
//a = a++ + a--
//二义性 在不同操作系统中运算方式不同 结果可能会产生偏差
//a = a++ * a-- - a--//err
//b:=a--//err
fmt.Println(a)
//fmt.Println(b)
}
类型转换
Go语言中不允许隐式转换,所有类型转换必须显式声明(强制转换),而且转换只能发生在两种相互兼容的类型之间
类型转换 数据类型(变量) 数据类型(表达式)
func main() {
a, b, c := 0, 0, 0
fmt.Scan(&a, &b, &c)
sum := a + b + c
fmt.Println(sum)
//类型转换 数据类型(变量) 数据类型(表达式)
//fmt.Println(float64(sum / 3))
fmt.Printf("%.2f", float64(sum)/3)
}
类型转换准则建议
在类型转换时建议低类型转成高类型 保证数据精度
建议整型转成浮点型
高类型转成低类型 可能会丢失精度int8 -> int16 ->int32 ->int64
float32 ->float64
int64 -> float64
下面我们来看一个丢失了精度的例子
数据溢出 符号发生变化
var a int = 1234
fmt.Println(int8(a))
fmt.Println(int32(a))
输出:
浮点型转成整型 保留数据整数部分 丢弃小数部分
将浮点型转成整型 保留数据整数部分 丢弃小数部分
var a float64 = 3.999
b := int(a) //3
fmt.Println(b)
输出结果: