Go语言运算符案例讲解

算数运算符

  • 算数运算符和C语言几乎一样
运算符 描述 实例
+ 相加 A + B
- 相减 A - B
* 相乘 A * B
/ 相除 B / A
% 求余 B % A
++ 自增 A++
自减 A–
  • 注意点:

    • 只有相同类型的数据才能进行运算
package main
import "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语言中++、–运算符不支持前置

    • 错误写法: ++i; --i;
  • Go语言中++、–是语句,不是表达式,所以必须独占一行
    • 错误写法: a = i++; return i++;
package main
import "fmt"
func main() {
	num1 := 0
	num1++
	fmt.Println(num1)
	//++num1 // 编译报错, Go语言中++只能后置,不能前置
	//fmt.Println(num1)
	//var num2 int = num1++ // 编译报错, num1++是语句不是表达式, 所以必须独占一行
	//fmt.Println(num2)
}

Go语言中字符串支持利用+号进行拼接

package main
import "fmt"
func main() {
	str := "abc" + "def"
	//fmt.Println(str)
}

关系算符

  • 关系算符和C语言一样
运算符 描述 实例
== 检查两个值是否相等,如果相等返回 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

逻辑运算符

  • 逻辑运算符和C语言一样
运算符 描述 实例
&& 如果两边的操作数都是 True,则条件 True,否则为 False。 A && B
\|\| 如果两边的操作数有一个 True,则条件 True,否则为 False。 A || B
! 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !A
  • 注意点:

    • 和C语言不通的是, Go语言中关系运算符只能返回true和false
    • 逻辑非只能用于true和false

位运算符

  • 位运算符和C语言几乎一样

运算符描述实例&参与运算的两数各对应的二进位相与, 对应位只要都是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语言几乎一样

    • 新增一个&^=运算符
运算符 描述 实例
= 将右边赋值给左边 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 main
import "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 main
import "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)) // 编译报错
}

运算符优先级

  • 和C语言一样, 只需记住()优先级最高即可

到此这篇关于Go语言运算符案例讲解的文章就介绍到这了,更多相关Go语言运算符内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang中为什么不存在三元运算符详解

    三元运算符广泛存在于其他语言中,比如: python: val = trueValue if expr else falseValue javascript: const val = expr ? trueValue : falseValue c.c++: const char *val = expr ? "trueValue" : "falseValue"; 然而,被广泛支持的三目运算符在golang中却是不存在的!如果我们写出类似下面的代码: val := ex

  • Golang 运算符及位运算详解

    什么是运算符? 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是"+". 在vb2005中运算符大致可以分为5种类型:算术运算符.位运算符. 关系运算符.赋值运算符.逻辑运算符. 算数运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符. func main() { a, b := 3,4 fmt.Printf("a 加 b

  • JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符

    JavaScript的假值列表如下, 值 类型 0 Number NaN (非数字) Number '' (空字符串) String false Boolean null Object undefined Undefined 以上的值作为判断条件,都将为假值,如: 复制代码 代码如下: if(undefined) { alert('undefined'); //这行代码不会执行 } while(null) { alert('null'); //这行代码不会执行 } 虽然这些值全部都等同于假,但它

  • Go语言运算符案例讲解

    算数运算符 算数运算符和C语言几乎一样 运算符 描述 实例 + 相加 A + B - 相减 A - B * 相乘 A * B / 相除 B / A % 求余 B % A ++ 自增 A++ – 自减 A– 注意点: 只有相同类型的数据才能进行运算 package main import "fmt" int main(){ var num1 int32 = 10 //var num2 int64 = num1 // 类型不同不能进行赋值运算 var num2 int64 = int64(

  • R语言运算符知识点讲解

    运算符 运算符:包含一个或者两个参数的无括号的参数 符号 说明 + - * ^ %% 取模运算 %/% 整除运算 可以定义自己的二元运算符 `%myop%` = function(a, b){ 2*a + 2*b } > 1 %myop% 1 [1] 4 一些特殊的语言结构也是二元运算符 例如:赋值运算符<-,索引[],函数调用max(a, b) 运算顺序 运算符的优先级 (按优先级排序) 运算符 描述 ({ 函数调用和分组表达式 [ [[ 索引 :: ::: 访问命名空间中的变量 $ @ 成

  • C语言通过案例讲解并发编程模型

    目录 1.按照指定的顺序输出 2.生产者消费者模型 3.读写锁 下面代码.思路等来源于b站郭郭 和CSAPP样例,同时希望大家好好读一下CSAPP的内容,真的讲的很好 1.按照指定的顺序输出 我们执行两个线程:foo1 和foo2 foo1:打印step1, step3 foo2:打印step2 请用并发使得按照1 2 3 的顺序输出 答:首先两个线程执行顺序不可预判,我们必须保证打印step2之前step1就打印好了,因此需要阻塞一下step2,实现的方式是初始化sem为0,只有打印完step

  • C语言指针引用数组案例讲解

    前言:C语言中指针玩的是什么,是内存,要想学好指针的小伙伴们要先对数据在内存中是怎么玩的做一番了解~       当在程序中定义一个变量时,系统会根据其数据类型为其开辟内存空间,例如Visual C++为整型变量分配四个字节的空间,为单精度浮点型变量分配四个字节,为字符型变量分配一个字节,内存中每个字节都有自己独立且唯一的一个编号,这就是地址 ,如下图,系统为变量i分配了2000~2004的存储单元. _访问变量的方式_有如下图两种: 第一种直接访问方式,直接通过变量名访问,变量名与地址有一一对

  • C语言异常处理机制案例讲解

    异常处理机制:setjmp()函数与longjmp()函数 C标准库提供两个特殊的函数:setjmp() 及 longjmp(),这两个函数是结构化异常的基础,正是利用这两个函数的特性来实现异常. 所以,异常的处理过程可以描述为这样: 首先设置一个跳转点(setjmp() 函数可以实现这一功能),然后在其后的代码中任意地方调用 longjmp() 跳转回这个跳转点上,以此来实现当发生异常时,转到处理异常的程序上,在其后的介绍中将介绍如何实现. setjmp() 为跳转返回保存现场并为异常提供处理

  • C语言 socketpair用法案例讲解

    socketpair()函数的声明: #include <sys/types.h> #include <sys/socket.h> int socketpair(int d, int type, int protocol, int sv[2]): socketpair()函数用于创建一对无名的.相互连接的套接子.  如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1]:否则返回-1,错误码保存于errno中. 基本用法:  这对套接字可以用于全双工通信,每一个套接字既

  • C语言深入探究直接插入排序与希尔排序使用案例讲解

    目录 一.直接插入排序 1.1直接插入排序引入 1.2直接插入排序的核心思想与算法分析 1.3实例说明 1.4直接插入排序代码实现 1.5直接插入排序性能分析 二.希尔排序 2.1希尔排序引入 2.2希尔排序的核心思想与算法分析 2.3实例说明 2.4希尔排序代码实现 2.5希尔排序性能分析 一.直接插入排序 1.1直接插入排序引入 排序是我们生活中经常会面对的问题,以打扑克牌为例,你摸的手牌肯定是杂乱的,你一定会将小牌移动到大牌的左面,大牌移动到小牌的右面,这样顺序就算理好了.这里我们的理牌方

  • C语言深入探究冒泡排序与堆排序使用案例讲解

    目录 一.冒泡排序 1.1冒泡排序引入 1.2冒泡排序的核心思想与算法分析 1.3实例说明 1.4优化 1.5代码实现 1.6性能分析 二.堆排序 2.1堆的基础知识 2.1.1堆是什么 2.1.2堆的性质 2.2堆排序的核心思想与基本步骤 2.3实例说明与分析 2.4代码实现 2.5性能分析 一.冒泡排序 1.1冒泡排序引入 对于任何编程语言,当我们学到循环和数组的时候,都会介绍一种排序算法:冒泡排序:深入学习更多排序算法后和在实际使用情况中,冒泡排序的使用还是极少的.它适合数据规模很小的时候

  • C语言深入探究选择排序与基数排序使用案例讲解

    目录 一.选择排序 1.1 选择排序引入 1.2 选择排序的基本思想与算法分析 1.3 实例说明 1.4 代码实现 1.5 性能分析 二.基数排序 2.1 基数排序基本思想与算法步骤 2.2 实例说明 2.3 代码实现 2.4 性能分析 一.选择排序 1.1 选择排序引入 就像炒股一样,有的人爱炒短线,不断的买进卖出通过差价来盈利,但是频繁的买进卖出,也会因为频繁的手续费和一系列费用获益较少:有的人,不断的进行观察和判断,等到时机一到,果断买进或卖出,这种人交易次数少,而最终收获颇丰:正如我们所

  • C语言运算符的优先级和结合性实例详解

    运算符是告诉编译程序执行特定算术或逻辑操作的符号.C语言的运算范围很宽,把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理.主要分为三大类:算术运算符. 关系运算符与逻辑运算符.除此之外,还有一些用于完成特殊任务的运算符. 先来看一个例子: #include <stdio.h> int main(){ int a=10,b=1,c=2; a=b=c; printf( "12+3*5=%d\n", 12+3*5); printf( "a=%d, c=%

随机推荐