首页 > 其他分享 >04 Golang 运算符

04 Golang 运算符

时间:2023-03-12 23:14:15浏览次数:45  
标签:Golang --- 04 fmt 运算符 Println main True

一、算术运算符

运算符描述
+ 相加
- 相减
* 相乘
/ 相除
% 求余

代码示例:

 1 package main
 2 ​
 3 import "fmt"
 4 ​
 5 func main() {
 6     // 算术运算符
 7     a := 5
 8     b := 2
 9 ​
10     fmt.Printf("a+b=%v\n", a+b) // a+b=7
11     fmt.Printf("a-b=%v\n", a-b) // a-b=3
12     fmt.Printf("a*b=%v\n", a*b) // a*b=10
13     fmt.Printf("a/b=%v\n", a/b) // a/b=2
14     fmt.Printf("a%%b=%v\n", a%b) // a%b=1 想要打印%号,可以用%转义,即 %%
15 }

注意: ++(自增)和 --(自减)在Go语言中是单独的语句,并不是运算符。

 1 package main
 2 ​
 3 import "fmt"
 4 ​
 5 func main() {
 6     a := 5
 7     b := 2
 8     
 9     if a > 4 {
10         a++
11     } else {
12         a--
13     }
14     fmt.Print(a)
15 }

二、关系运算符

运算符描述
== 检查两个值是否相等,如果相等返回 True 否则返回 False。
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。
 1 package main
 2 ​
 3 import "fmt"
 4 ​
 5 func main() {
 6     a := 5
 7     b := 2
 8 ​
 9     fmt.Println(a == b) // false
10     fmt.Println(a != b) // true
11     fmt.Println(a > b)  // true
12     fmt.Println(a >= b) // true
13     fmt.Println(a < b)  // false
14     fmt.Println(a <= b) // false
15 }

 

三、逻辑运算符

运算符描述
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。
! 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。
 
 1 package main
 2 ​
 3 import "fmt"
 4 ​
 5 func main() {
 6     a := 5
 7     b := 2
 8     c := 3
 9 ​
10     fmt.Println(a > b && c > b) // true
11     fmt.Println(a < b && c > b) // false
12 ​
13     fmt.Println(a > b || c > b) // true
14     fmt.Println(a < b || c < b) // false
15 ​
16     fmt.Println(!(a > b)) // false
17 }

四、位运算符

位运算符对整数在内存中的二进制位进行操作

运算符描述
& 参与运算的两数各对应的二进位相与。 (两位均为1才为1)
| 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1)
<< 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
>> 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。
 
 1 package main
 2 ​
 3 import "fmt"
 4 ​
 5 func main() {
 6     a := 5 // 0101
 7     b := 6 // 0110
 8 ​
 9     fmt.Println(a & b)  // 4
10     fmt.Println(a | b)  // 7
11     fmt.Println(a ^ b)  // 3
12     fmt.Println(a >> 1) // 2
13     fmt.Println(a << 1) // 10
14 }

分析

 1 a --转换成二进制--> 0101
 2 b -- 转换成二进制--> 0110
 3              0101
 4 a & b --->   0110 
 5            --------
 6              0100  ---> 转换成十进制为 4
 7          
 8              0101
 9 a | b --->   0110 
10            --------
11              0111  ---> 转换成十进制为 7
12 ​
13              0101
14 a ^ b --->   0110 
15            --------
16              0011  ---> 转换成十进制为 3
17              
18 a >> 1 ---> 0101 ---> 所有位向右(后)移动一位,在最前面补0 ---> 0010  ---> 转换成十进制 2
19 ​
20 a << 1 ---> 0101 ---> 所有位向左(前)移动一位,在最后面补0 ---> 1010  ---> 转换成十进制 10

注意,对于位的移动操作,如果超过原本数据类型的长度,只会从后往前保留对应的位数,如:

1 package main
2 ​
3 import "fmt"
4 ​
5 func main() {
6     a := int8(1) // 定义一个八位的整数
7     fmt.Println(a << 10) // 0
8 }

分析

a<<1 ---> 00000001 ---> 所有位向左移动十位在最后面补0 ---> 10000000000 ---> 但是a最长只能是八位,多以只能从右往左保留八位,00000000,转换成十进制结果为0

示例:有一堆数字,如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数字?

思路:可以使用异或运算操作,0 与任何数值异或的结果都为值本身,相同的值异或结果为 0

 1 package main
 2 ​
 3 import "fmt"
 4 ​
 5 func main() {
 6     nums := [...]int{1, 1, 2, 3, 2}
 7     obj := 0
 8     for _, v := range nums {
 9         obj ^= v
10     }
11     fmt.Println(obj)
12 }

五、赋值运算符

运算符描述
= 简单的赋值运算符,将一个表达式的值赋给一个左值
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异或后赋值


 1 package main
 2 ​
 3 import "fmt"
 4 ​
 5 func main() {
 6     a := 5
 7 ​
 8     var b int
 9     b = a
10     fmt.Println(b)
11 ​
12     a += 2 // a = a + 2
13     a -= 2 // a = a - 2
14     a *= 2 // a = a * 2
15     a /= 2 // a = a / 2
16     a %= 2 // a = a % 2
17 }

 

标签:Golang,---,04,fmt,运算符,Println,main,True
From: https://www.cnblogs.com/cdc1216/p/17209517.html

相关文章

  • Ubuntu22.04下解决终端无法打开vscode
    一般来说,有时为了方便会直接在Ubuntu终端登陆root账户获取权限在root下打开vscode会提示无法打开。环境:Ubuntu22.04解决办法:终端输入:vi~/.bashrc添加一行:aliascod......
  • P4047 [JSOI2010]部落划分
    地图上标注了n个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。......
  • Golang的defer用法
    直观理解deferpackagemainimport("fmt")funcmain(){fmt.Println("deferbegin")//将defer放入延迟调用栈deferfmt.Println(1)def......
  • Ubuntu 20.04 挂载局域网络共享硬盘
    创建挂载目录mkdir/media/nas创建认证文件。若无密码可以忽略这一步。sudovim/root/.examplecredentials按照以下格式写入用户名密码:username=example_usern......
  • 【编辑器】常用编程环境使用感受20190804
    一、编辑器1、Vim/Emase又被称之为神器:编辑器之神vs神之编辑器学习使用成本高and定义所有功能2、Sublime/Vscode/Atom现在编辑器,有以下特点:跨平台,颜值高,性能佳3、Note......
  • Android 近期关注的文章和内容位运算符使用场
    App启动流程分析 ​​https://zhuanlan.zhihu.com/p/59801160​​ Application启动流程 ​​https://www.jianshu.com/p/14d54a76b16f​​Kotlin基础语法 ​​ https:......
  • 欧陆战争6:1804 省区地块参考
    借了个可视化编辑器,把地块编号数据截了一下。加拿大西部:加拿大北部:格陵兰与爱尔兰:英格兰与北海:波罗的海沿岸:俄罗斯北部:美国西部:美国东部:北大西洋:英吉......
  • 欧陆战争6:1804 战役文件参考
    本文为战役btl文件内容参考,曾发布于百度贴吧。说明:1.一般的,本文数字为16进制数字,除非另有说明。2.本文涉及的ID编号可在json文件中找到,默认为10进制数字,在btl中填写前......
  • 04-IDEA 开发+数据类型
    IDEA开发psvm缩写直接生成main方法sout直接生成输出打印 注释标注解释,写代码量多,这时需要注释了。单行,多行,文档注释 annotations注解comments注释 标识......
  • 基础算术运算符
    理解:不同数据类型的数进行运算,结果为容量高的。自增,自减,属于一元运算符。自增,自减,例如intb=a++intb=++a;当不进行赋值操作时。a都是自身++,也就是a=a+1操作。当进行......