算数运算符 运算符 描摹 实例 + 相加 A + B - 相减 A - B * 相乘 A * B / 相除 B / A % 求余 B % A ++ 自增 A++ – 自减 A–
package mainimport "fmt"int main(){ var num1 int32 = 10 //var num2 int64 = num1 // 圭表类型不合不克不及举办赋值运算 var num2 int64 = int64(num1) // 圭表类型不合不克不及举办赋值运算 fmt.Println(num2) var num3 int32 = 10 var num4 int64 = 20 //var res int64 = num3 + num4 // 圭表类型不合不克不及举办算数运算 var res1 int64 = int64(num3) + num4 // 圭表类型不合不克不及举办算数运算 fmt.Println(res1) var num5 int32 = 10 var num6 int64 = 20 //var res2 bool = (num5 == num6) // 圭表类型不合不克不及举办相干运算 var res2 bool = (num5 == int32(num6)) // 圭表类型不合不克不及举办相干运算 fmt.Println(res2) // ... ... 此外以此类推} Go言语中++、–运算符不支撑前置 Go言语中++、符案–是例解 语句,不是表达式,所以必须独有一行 偏向写法: a = i++; return i++; package mainimport "fmt"func main() { num1 := 0 num1++ fmt.Println(num1) //++num1 // 编译报错, Go言语中++只能后置,不克不及前置 //fmt.Println(num1) //var num2 int = num1++ // 编译报错, num1++是语句不是表达式, 所以必须独有一行 //fmt.Println(num2)} Go言语中字符串支撑独霸+号举办拼接
package mainimport "fmt"func main() { str := "abc" + "def" //fmt.Println(str)} 相干算符 运算符 描摹 实例 == 搜检两个值可否相当,假定相当前去 True 不然前去 False。释注 A == B != 搜检两个值可否不相当,言语运算假定不相当前去 True 不然前去 False。符案 A != B > 搜检右边值可否除夜于右边值
,例解假定是释注前去 True 不然前去 False
。 A > B < 搜检右边值可否小于右边值,言语运算假定是符案前去 True 不然前去 False
。 A < B >= 搜检右边值可否除夜于等于右边值 ,例解 假定是释注前去 True 不然前去 False。 A >= B <= 搜检右边值可否小于等于右边值
,言语运算假定是符案前去 True 不然前去 False。 A <= B
寄看点: 和C言语不通的例解是, Go言语中相干运算符只能前去true和false 逻辑运算符 运算符 描摹 实例 && 假定单方的独霸数都是 True,则前提 True,不然为 False。 A && B \|\| 假定单方的独霸数有一个 True
,则前提 True
,不然为 False。 A || B ! 假定前提为 True ,则逻辑 NOT 前提 False,不然为 True。 !A
寄看点: 和C言语不通的是, Go言语中相干运算符只能前去true和false 逻辑非只能用于true和false 位运算符 运算符描摹实例&介入运算的两数各对应的二进位相与, 对应位只需都是1下场就为1A & B\|介入运算的两数各对应的二进位相或,对应位只需个中一个是1下场就为1A | B^介入运算的两数各对应的二进位相异或,对应位只需不分化果就是1A ^ B<<左移运算符,左移n位就是乘以2的n次方A << 2>>右移运算符,右移n位就是除以2的n次方B >> 2&^逻辑清零运算符, B对应位是1,A对应位清零,B对应位是0, A对应位保管原样A &^ B
int main(){ /* 0110 a &^1011 b 假定b位位1,那么下场为0, 不然下场为a位对应的值 ---------- 0100 */ a1 := 6 b1 := 11 res1 := a1 &^ b1 fmt.Println("res1 = ", res1) // 4 /* 1011 a &^1101 b 假定b位位1,那么下场为0, 不然下场为a位对应的值 ---------- 0010 */ a2 := 11 b2 := 13 res2 := a2 &^ b2 fmt.Println("res2 = ", res2) // 2} 赋值运算符 运算符 描摹 实例 = 将右边赋值给右边 C = A + B 将 A + B 表达式下场赋值给 C += 相加后再赋值 C += A 等于 C = C + A -= 相减后再赋值 C -= A 等于 C = C - A *= 相乘后再赋值 C *= A 等于 C = C * A /= 相除后再赋值 C /= A 等于 C = C / A %= 求余后再赋值 C %= A 等于 C = C % A <<= 左移赋值 C <<= 2 等于 C = C << 2 >>= 右移赋值 C >>= 2 等于 C = C >> 2 &= 位逻辑与赋值 C &= 2 等于 C = C & 2 ^= 位逻辑或赋值 C ^= 2 等于 C = C ^ 2 \|= 位逻辑异或赋值 C |= 2 等于 C = C | 2 &^= 位逻辑清零赋值 C &^= 2 等于 C = C &^ 2
此外运算符 运算符 描摹 实例 & 前去变量存储地址 &a; 将给出变量的理论地址 * 访谒指针指向内存 *p; 访谒指针p指向内存
package mainimport "fmt"int main(){ var num int = 666 var p *int = &num fmt.Println(num) fmt.Println(*p) num = 777 fmt.Println(num) *p = 999 fmt.Println(num)} #include <stdio.h>int main(){ int ages[3] = { 19, 23, 22}; int *arrayP = &ages[0]; printf("ages[0] = %i\n", *(arrayP + 0)); // *(arrayP + 0) == *arrayP printf("ages[1] = %i\n", *(arrayP + 1)); printf("ages[2] = %i\n", *(arrayP + 2)); return 0;} package mainimport "fmt"int main(){ var ages [3]int = [3]int{ 19, 23, 22} var p *int = &ages[0] //fmt.Println(&ages[0]) //fmt.Println(*p) // 19 fmt.Println(*(p + 0)) // 编译报错} 运算符优先级 到此这
算数运算符 运算符 描摹 实例 + 相加 A + B - 相减 A - B * 相乘 A * B / 相除 B / A % 求余 B % A ++ 自增 A++ – 自减 A–
package mainimport "fmt"int main(){ var num1 int32 = 10 //var num2 int64 = num1 // 圭表类型不合不克不及举办赋值运算 var num2 int64 = int64(num1) // 圭表类型不合不克不及举办赋值运算 fmt.Println(num2) var num3 int32 = 10 var num4 int64 = 20 //var res int64 = num3 + num4 // 圭表类型不合不克不及举办算数运算 var res1 int64 = int64(num3) + num4 // 圭表类型不合不克不及举办算数运算 fmt.Println(res1) var num5 int32 = 10 var num6 int64 = 20 //var res2 bool = (num5 == num6) // 圭表类型不合不克不及举办相干运算 var res2 bool = (num5 == int32(num6)) // 圭表类型不合不克不及举办相干运算 fmt.Println(res2) // ... ... 此外以此类推} Go言语中++ 、–运算符不支撑前置 Go言语中++、–是语句,不是表达式,所以必须独有一行 偏向写法: a = i++; return i++; package mainimport "fmt"func main() { num1 := 0 num1++ fmt.Println(num1) //++num1 // 编译报错, Go言语中++只能后置,不克不及前置 //fmt.Println(num1) //var num2 int = num1++ // 编译报错, num1++是语句不是表达式, 所以必须独有一行 //fmt.Println(num2)} Go言语中字符串支撑独霸+号举办拼接
package mainimport "fmt"func main() { str := "abc" + "def" //fmt.Println(str)} 相干算符 运算符 描摹 实例 == 搜检两个值可否相当
,假定相当前去 True 不然前去 False。 A == B != 搜检两个值可否不相当,假定不相当前去 True 不然前去 False。 A != B > 搜检右边值可否除夜于右边值,假定是前去 True 不然前去 False。 A > B < 搜检右边值可否小于右边值
,假定是前去 True 不然前去 False。 A < B >= 搜检右边值可否除夜于等于右边值,假定是前去 True 不然前去 False。 A >= B <= 搜检右边值可否小于等于右边值
,假定是前去 True 不然前去 False
。 A <= B
寄看点: 和C言语不通的是, Go言语中相干运算符只能前去true和false 逻辑运算符 运算符 描摹 实例 && 假定单方的独霸数都是 True,则前提 True ,不然为 False 。 A && B \|\| 假定单方的独霸数有一个 True
,则前提 True ,不然为 False 。 A || B ! 假定前提为 True,则逻辑 NOT 前提 False,不然为 True。 !A
寄看点: 和C言语不通的是, Go言语中相干运算符只能前去true和false 逻辑非只能用于true和false 位运算符 运算符描摹实例&介入运算的两数各对应的二进位相与, 对应位只需都是1下场就为1A & B\|介入运算的两数各对应的二进位相或,对应位只需个中一个是1下场就为1A | B^介入运算的两数各对应的二进位相异或,对应位只需不分化果就是1A ^ B<<左移运算符,左移n位就是乘以2的n次方A << 2>>右移运算符,右移n位就是除以2的n次方B >> 2&^逻辑清零运算符, B对应位是1,A对应位清零,B对应位是0, A对应位保管原样A &^ B
int main(){ /* 0110 a &^1011 b 假定b位位1,那么下场为0, 不然下场为a位对应的值 ---------- 0100 */ a1 := 6 b1 := 11 res1 := a1 &^ b1 fmt.Println("res1 = ", res1) // 4 /* 1011 a &^1101 b 假定b位位1,那么下场为0, 不然下场为a位对应的值 ---------- 0010 */ a2 := 11 b2 := 13 res2 := a2 &^ b2 fmt.Println("res2 = ", res2) // 2} 赋值运算符 运算符 描摹 实例 = 将右边赋值给右边 C = A + B 将 A + B 表达式下场赋值给 C += 相加后再赋值 C += A 等于 C = C + A -= 相减后再赋值 C -= A 等于 C = C - A *= 相乘后再赋值 C *= A 等于 C = C * A /= 相除后再赋值 C /= A 等于 C = C / A %= 求余后再赋值 C %= A 等于 C = C % A <<= 左移赋值 C <<= 2 等于 C = C << 2 >>= 右移赋值 C >>= 2 等于 C = C >> 2 &= 位逻辑与赋值 C &= 2 等于 C = C & 2 ^= 位逻辑或赋值 C ^= 2 等于 C = C ^ 2 \|= 位逻辑异或赋值 C |= 2 等于 C = C | 2 &^= 位逻辑清零赋值 C &^= 2 等于 C = C &^ 2
此外运算符 运算符 描摹 实例 & 前去变量存储地址 &a; 将给出变量的理论地址 * 访谒指针指向内存 *p; 访谒指针p指向内存
package mainimport "fmt"int main(){ var num int = 666 var p *int = &num fmt.Println(num) fmt.Println(*p) num = 777 fmt.Println(num) *p = 999 fmt.Println(num)} #include <stdio.h>int main(){ int ages[3] = { 19, 23, 22}; int *arrayP = &ages[0]; printf("ages[0] = %i\n", *(arrayP + 0)); // *(arrayP + 0) == *arrayP printf("ages[1] = %i\n", *(arrayP + 1)); printf("ages[2] = %i\n", *(arrayP + 2)); return 0;} package mainimport "fmt"int main(){ var ages [3]int = [3]int{ 19, 23, 22} var p *int = &ages[0] //fmt.Println(&ages[0]) //fmt.Println(*p) // 19 fmt.Println(*(p + 0)) // 编译报错} 运算符优先级 到此这Go言语