GO学习日志10

张开发
2026/4/13 11:09:15 15 分钟阅读

分享文章

GO学习日志10
运算符算术运算符Go语言支持以下基本算术运算符加法运算符-减法运算符*乘法运算符/除法运算符%取模余运算符加法运算符示例a : 10 5 // 结果为15 b : 3.14 2.71 // 结果为5.85减法运算符示例x : 20 - 8 // 结果为12 y : -5 - 3 // 结果为-8乘法运算符示例m : 6 * 7 // 结果为42 n : 2.5 * 4 // 结果为10.0除法运算符示例整数除法会截断小数部分p : 10 / 3 // 结果为3浮点数除法会保留小数q : 10.0 / 3 // 结果为3.333...取模运算符示例仅适用于整数类型r : 10 % 3 // 结果为1 s : -10 % 3 // 结果为-1实际上取余运算是可以用公式表达余数被除数-被除数/除数*除数自增自减运算符自增运算符--自减运算符前置形式如i或--i在Go中是无效语法会导致编译错误。只能作为语句使用不能出现在表达式包括赋值中package main import fmt func main() { i : 1 i // 合法 fmt.Println(i) // 输出: 2 j : 5 j-- // 合法 fmt.Println(j) // 输出: 4 // i 或 --j 会导致编译错误 // 错误示例: syntax error: unexpected , expecting } }关系运算符种类Go语言中的关系运算符用于比较两个值返回布尔值true或false。以下是所有关系运算符等于!不等于小于小于或等于大于大于或等于a : 10 b : 20 result : a b // falsex : hello y : world result : x ! y // truenum1 : 15 num2 : 25 result : num1 num2 // true注意事项关系运算符只能用于可比较的类型如数值、字符串、布尔值等。比较不同类型的变量会导致编译错误。浮点数的比较可能存在精度问题需谨慎处理。逻辑运算符种类Go语言支持以下三种逻辑运算符逻辑与当两边的表达式均为true时返回true否则返回false。||逻辑或当任意一边的表达式为true时返回true否则返回false。!逻辑非对布尔值取反true变falsefalse变true。使用方式示例逻辑与a : true b : false result : a b // false因为b为false fmt.Println(result)逻辑或||x : 10 y : 20 result : (x 5) || (y 10) // truex 5为true fmt.Println(result)逻辑非!flag : true result : !flag // false fmt.Println(result)短路行为说明若左侧表达式为false右侧表达式不会执行。||若左侧表达式为true右侧表达式不会执行。func check() bool { fmt.Println(执行检查) return true } func main() { a : false result : a check() // check()不会执行 fmt.Println(result) }优先级规则!优先级最高。优先级高于||。可通过括号()显式控制运算顺序。赋值运算符种类及使用方式Go语言中的赋值运算符用于将值赋给变量以下是常见的赋值运算符及其使用方式运算符描述示例等价于简单赋值x 10x 10加后赋值x 5x x 5-减后赋值x - 3x x - 3*乘后赋值x * 2x x * 2/除后赋值x / 4x x / 4%取模后赋值x % 3x x % 3按位与后赋值x 0x0Fx x 0x0F|按位或后赋值x | 0x0Fx x | 0x0F^按位异或后赋值x ^ 0x0Fx x ^ 0x0F左移后赋值x 2x x 2右移后赋值x 1x x 1package main import fmt func main() { // 简单赋值 x : 10 fmt.Println(x , x) // 加后赋值 x 5 fmt.Println(x 5 -, x) // 减后赋值 x - 3 fmt.Println(x - 3 -, x) // 乘后赋值 x * 2 fmt.Println(x * 2 -, x) // 除后赋值 x / 4 fmt.Println(x / 4 -, x) // 取模后赋值 x % 3 fmt.Println(x % 3 -, x) // 按位与后赋值 x 0x0F fmt.Println(x 0x0F -, x) // 按位或后赋值 x | 0x0F fmt.Println(x | 0x0F -, x) // 按位异或后赋值 x ^ 0x0F fmt.Println(x ^ 0x0F -, x) // 左移后赋值 x 2 fmt.Println(x 2 -, x) // 右移后赋值 x 1 fmt.Println(x 1 -, x) }运行上述代码后输出结果可能如下x 10 x 5 - 15 x - 3 - 12 x * 2 - 24 x / 4 - 6 x % 3 - 0 x 0x0F - 0 x | 0x0F - 15 x ^ 0x0F - 0 x 2 - 0 x 1 - 0注0x0f等于十进制的15位运算符用于直接操作整数的二进制位按位与对两个操作数的每一位执行逻辑与操作只有对应位都为1时结果位才为1。a : 5 // 0101 b : 3 // 0011 result : a b // 0001 (1)按位或|对两个操作数的每一位执行逻辑或操作只要对应位有一个为1结果位就为1。a : 5 // 0101 b : 3 // 0011 result : a | b // 0111 (7)按位异或^对两个操作数的每一位执行异或操作对应位不同时结果位为1。a : 5 // 0101 b : 3 // 0011 result : a ^ b // 0110 (6)按位取反^一元运算符对操作数的每一位取反0变11变0。a : 5 // 0101 result : ^a // 1010 (取决于整数位数结果为-6)左移位将左操作数的二进制位向左移动右操作数指定的位数低位补0。a : 1 // 0001 result : a 3 // 1000 (8)右移位将左操作数的二进制位向右移动右操作数指定的位数高位补符号位。a : 8 // 1000 result : a 3 // 0001 (1)无符号右移位Go语言没有单独的无符号右移运算符可以通过类型转换实现。a : -8 result : uint(a) 3 // 高位补0位运算应用场景位运算常用于以下场景权限控制用位掩码表示不同权限性能优化替代部分算术运算数据压缩位级操作加密算法位级变换注意事项使用位运算时需要注意操作数必须是整数类型移位运算的右操作数应小于左操作数的位数无符号整数的右移与有符号整数不同位运算优先级低于算术运算建议使用括号明确优先级

更多文章