Golang_03: Go语言 数学运算:算术运算、赋值运算、比较运算、逻辑运算、位运算

原文链接:https://xiets.blog.csdn.net/article/details/130864686

版权声明:原创文章禁止转载

专栏目录:Golang 专栏(总目录)

Go 程序中参与数学运算的数值类型必须完全相同,如果类型不同,必须先转换为相同的类型。如果是变量,需要显式转换;如果是字面量,会自动隐式转换。

// 定义两个不同类型的整数
var a int = 2
var b int32 = 3

c1 := a + b				// 编译报错, 因为 a 和 b 的类型不相同
c2 := int32(a) + b		// 编译通过, a 被转换为 int32 类型, 再与同是 int32 类型的 b 相加
c3 := 5 + b				// 编译通过, 5 被隐式转换为 int32 类型

1. 算术运算

运算符   描述          示例
--------------------------------------------------------------------------
+       加法          2 + 3 == 5; "ab" + "cd" == "abcd"
-       减法          5 - 2 == 3
*       乘法          2 * 3 == 6; 2 * 3.0 == 6.0
/       除法          3 / 2 == 1; 3 / 2.0 == 1.5
%       取模          5 % 3 == 2; 5 % -3 == 2; -5 % 3 == -2; -5 % -3 == -2
--------------------------------------------------------------------------
  • 除法/运算,如果两个操作数是整数,则结果只取整数部分 (且结果为整数)。
  • 取模%运算,只能用于整数,取模余数的正负符号因编程语言而异。在 Go 中,取模余数的正负符号总与被除数(%左边的数)一致。例如,-5 % 3 == -2-5 % -3 == -25 % -3 == 2
  • 算术运算的结果如果超出对应数值类型的值范围,称为 溢出。溢出的高位部分会无提示丢弃。

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 <<= a 等价于 c = c << a
>>=     右移赋值        c >>= a 等价于 c = c >> a
&=      位与赋值        c &= a 等价于 c = c & a
^=      异或赋值        c ^= a 等价于 c = c ^ a
|=      位或赋值        c |= a 等价于 c = c | a

++      自增赋值        a++ 等价于 a += 1, 等价于 a = a + 1
--      自减赋值        a-- 等价于 a -= 1, 等价于 a = a - 1
--------------------------------------------------------

3. 比较运算

比较运算 表达式的结果为 bool 类型 (true or false)。

运算符   描述            示例
-----------------------------------------------------------------
==      相等           2 == 2 结果为 true
!=      不相等         "abc" != "abc" 结果为 false
>       大于           3 > 2 结果为 true; "xyz" > "abc" 结果为 true
<       小于           3 < 2 结果为 false
>=      大于等于        3 >= 3 结果为 true
<=      小于等于        8 <= 5 结果为 false
-----------------------------------------------------------------

4. 逻辑运算

逻辑运算 表达式的结果为 bool 类型 (true or false)。

运算符   描述            示例
-----------------------------------------------------------------
&&      逻辑与          a && b, a 和 b 为布尔表达式
||      逻辑或          a || b
!       逻辑非          !a
-----------------------------------------------------------------

5. 位运算

运算符   描述            示例
---------------------------------------------------------------------------
&       位与            a & b, 整数a 和 整数b 按位与运算
|       位或            a | b, 整数a 和 整数b 按位或运算
^       异或            a ^ b, 整数a 和 整数b 按位异或运算
^       取反            ^a, 对 整数a 按位取反
<<      左移            a << 1, 整数a 左移 1, 00000111 << 1 结果为 00001110
>>      右移            a >> 1, 整数a 右移 1, 00000111 >> 1 结果为 00000011
---------------------------------------------------------------------------

许多编程语言中使用波浪线~作为 按位取反 的操作符,Go 语言重用了按位异或操作符^。如果^用于二元运算(如 a ^ b),则表示 按位异或;如果^用于一元运算(如 ^a),则表示 按位取反

正负数的左移右移(正负符号位也一起移动):

  • << 左移:左移(右边)低位补0。
  • >> 右移:正数右移,(左边)高位补0;负数右移,(左边)高位补1。

6. 其他运算符

运算符   描述            示例
------------------------------------------------------------------------------
&       取地址           p = &a, 取变量a的地址赋值给指针变量p, 指针p 指向 变量a
*       解引用           a = *p, 引用指针p指向的变量, 取出指针p指向的变量值赋值给变量a
------------------------------------------------------------------------------

&* 运算符在二元运算时表示 位与乘法,一元运算时表示 取地址解引用

7. 运算符优先级

Go 语言常用运算符优先级(从高到低优先级排列):

#分类运算符运算方向
1括号(), []从左到右
2从通道取值<-从右到左
3属性/成员访问(点).从左到右
4一元运算(单目运算)!, *(解引用), &(取地址), ++, --, +(正号), -(负号)从右到左
5乘除/取模*(乘号), /, %从左到右
6加减+(加号), -(减号)从左到右
7位移<<, >>从左到右
8比较运算(大小比较)<, <=, >, >=从左到右
9比较运算(相等比较)==, !=从左到右
10位运算(位与)&(位与)从左到右
11位运算(异或)^(异或)从左到右
12位运算(位或)``
13逻辑运算(与)&&从左到右
14逻辑运算(或)`
15赋值运算=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, `=`
16逗号,从左到右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢TS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值