首页 > 其他分享 >GO语言中的运算符

GO语言中的运算符

时间:2023-10-24 15:01:59浏览次数:27  
标签:语言 fmt 运算符 var Printf GO True float32

算法术运算符

运算符 描述
+ 相加
- 相减
* 相乘
/ 相除
% 求余,仅限整数
//arithmetic 算术运算
func arithmetic() {
	var a float32 = 8
	var b float32 = 3
	var c float32 = a + b
	var d float32 = a - b
	var e float32 = a * b
	var f float32 = a / b
	fmt.Printf("a=%.3f, b=%.3f, c=%.3f, d=%.3f, e=%.3f, f=%.3f\n", a, b, c, d, e, f)
}

关系运算符

运算符 描述
== 检查两个值是否相等,如果相等返回 True 否则返回 False
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False
//relational 关系运算符
func relational() {
	var a float32 = 8
	var b float32 = 3
	var c float32 = 8
	fmt.Printf("a==b吗 %t\n", a == b)
	fmt.Printf("a!=b吗 %t\n", a != b)
	fmt.Printf("a>b吗 %t\n", a > b)
	fmt.Printf("a>=b吗 %t\n", a >= b)
	fmt.Printf("a<c吗 %t\n", a < b)
	fmt.Printf("a<=c吗 %t\n", a <= c)
}

逻辑运算符

运算符 描述
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False
! 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True
//logistic 逻辑运算符
func logistic() {
	var a float32 = 8
	var b float32 = 3
	var c float32 = 8
	fmt.Printf("a>b && b>c吗 %t\n", a > b && b > c)
	fmt.Printf("a>b || b>c吗 %t\n", a > b || b > c)
	fmt.Printf("a>b不成立,对吗 %t\n", !(a > b))
	fmt.Printf("b>c不成立,对吗 %t\n", !(b > c))
}

位运算符

运算符 描述
& 参与运算的两数各对应的二进位相与(两位均为1才为1)
| 参与运算的两数各对应的二进位相或(两位有一个为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相同时为0,不同时为1。作为一元运算符时表示按位取反,,符号位也跟着变
<< 左移n位就是乘以2的n次方。a<<b是把a的各二进位全部左移b位,高位丢弃,低位补0。通过左移,符号位可能会变
>> 右移n位就是除以2的n次方。a>>b是把a的各二进位全部右移b位,正数高位补0,负数高位补1
//bit_op 位运算
func bit_op() {
	fmt.Printf("os arch %s, int size %d\n", runtime.GOARCH, strconv.IntSize) //int是4字节还是8字节,取决于操作系统是32位还是64位
	var a int32 = 260
	fmt.Printf("260     %s\n", util.BinaryFormat(a))
	fmt.Printf("-260    %s\n", util.BinaryFormat(-a)) //负数用补码表示。在对应正数二进制表示的基础上,按拉取反,再末位加1
	fmt.Printf("260&4   %s\n", util.BinaryFormat(a&4))
	fmt.Printf("260|3   %s\n", util.BinaryFormat(a|3))
	fmt.Printf("260^7   %s\n", util.BinaryFormat(a^7))     //^作为二元运算符时表示异或
	fmt.Printf("^-260   %s\n", util.BinaryFormat(^-a))     //^作为一元运算符时表示按位取反,符号位也跟着变
	fmt.Printf("-260>>10 %s\n", util.BinaryFormat(-a>>10)) //正数高位补0,负数高位补1
	fmt.Printf("-260<<3 %s\n", util.BinaryFormat(-a<<3))   //负数左移,可能变成正数
	//go语言没有循环(无符号)左/右移符号   >>>  <<<
}

//位运算转换k m g
func main() {
	k := 1 << 10
	m := k << 10
	g := m << 10
	fmt.Printf("%d %d %d", k, m, g)
}
//1024 1048576 1073741824

位运算的应用场景:

  • 逻辑控制(运算快,省CPU)
  • bitmap和bloom filter(省内存)

总之,位运算适用于对性能要求高的场景。

func bit_application() {
	{
		var gender string = "男"
		var degree string = "本科"
		var is985 bool = true

		var condition1 bool = gender == "男"
		var condition2 bool = gender == "男" && is985
		var condition3 bool = gender == "男" && degree == "硕士" && is985
		fmt.Printf("满足条件1 %t\n", condition1)
		fmt.Printf("满足条件2 %t\n", condition2)
		fmt.Printf("满足条件3 %t\n", condition3)
	}
	{
		var gender byte = 1      //末位,1:男,0:女
		var degree byte = 1 << 1 //倒数第二位,1:硕士,0:本科
		var is985 byte = 1 << 2  //倒数第三位,1:是985,2:不是985
		var man byte = gender | is985

		var condition1 byte = gender
		var condition2 byte = gender | is985
		var condition3 byte = gender | is985 | degree
		fmt.Printf("满足条件1 %t\n", man&condition1 == condition1)
		fmt.Printf("满足条件2 %t\n", man&condition2 == condition2)
		fmt.Printf("满足条件3 %t\n", man&condition3 == condition3)
	}
}

赋值运算符

运算符 描述
= 简单的赋值运算符,将一个表达式的值赋给一个左值
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异或后赋值
//assignment 赋值运算
func assignment() {
	var a, b int = 8, 3
	a += b
	fmt.Printf("a+=b %d\n", a)
	a, b = 8, 3
	a -= b
	fmt.Printf("a-=b %d\n", a)
	a, b = 8, 3
	a *= b
	fmt.Printf("a*=b %d\n", a)
	a, b = 8, 3
	a /= b
	fmt.Printf("a/=b %d\n", a)
	a, b = 8, 3
	a %= b
	fmt.Printf("a%%=b %d\n", a) //%在fmt里有特殊含意,所以需要前面再加个%转义一下
	a, b = 8, 3
	a <<= b
	fmt.Printf("a<<=b %d\n", a)
	a, b = 8, 3
	a >>= b
	fmt.Printf("a>>=b %d\n", a)
	a, b = 8, 3
	a &= b
	fmt.Printf("a&=b %d\n", a)
	a, b = 8, 3
	a |= b
	fmt.Printf("a|=b %d\n", a)
	a, b = 8, 3
	a ^= b
	fmt.Printf("a^=b %d\n", a)
}

位运算

^

  • 可以是单目运算符按位取反
  • 可以是双目运算符 异或
func main() {
	a := 5
	fmt.Printf("%b %b", ^a, a^4)
}
//-110 1

&

  • 可以是双目运算符与
  • 可以是取地址的运算符
func main() {
	a := 5
	var b *int
	b = &a
	fmt.Printf("%p %b", b, a&4)
}
//0xc000016088 100

*

  • 可以是乘
  • 可以标记指针指向的类型
  • 可以解析地址,取出地址中的值
func main() {
	a := 5
    //声明指针变量指向int值
	var b *int
	b = &a
	fmt.Printf("%p %b %d", b, a&4, *b)
}
//0xc000016088 100 5

左移右移

左移补零

右移补一

标签:语言,fmt,运算符,var,Printf,GO,True,float32
From: https://www.cnblogs.com/guangdelw/p/17784797.html

相关文章

  • GO中的变量、常量、字面量
    变量类型类型go变量类型fmt输出整型intint8int16int32int64uintuint8uint16uint32uint64%d(十进制)%b(二进制)%x(十六进制)浮点型float32float64%f(普通形式)%e(科学计数法,10的指数幂的形式)%g(e和f之间)布尔型bool%t指针uintptr(取地址用&......
  • GO中变量的作用域
    对于全局变量如果以大写字母开头,所有地方都可以访问,跨package访问时需要带上package名称;如果以小写字母开头,则本package内都可以访问。函数内部的局部变量,仅本函数内可以访问。{}可以固定一个作用域。内部声明的变量可以跟外部声明的变量有冲突,以内部的为准--就近原则。va......
  • JGoodies Usage Notes
    导包、设置导入包:<dependency><groupId>com.jgoodies</groupId><artifactId>forms</artifactId><version>1.2.1</version></dependency>idea里面布局切换一下:行列规范解释他是一个类似表格布局方式,你先设计好一个大的表格背景,然后将你想要的组件放置到指......
  • UGO+DRS评复之路
    前言针对数据库整体迁移方案,为解决异构平台数据库迁移,为减轻迁移人员的工作强度以及迁移周期。华为云GaussDB迁移UGO&DRS迁移工具应运而生。 UGO介绍数据库和应用迁移(DatabaseandApplicationMigrationUGO,简称为UGO)是一款专注于异构数据库对象迁移和应用迁移的专业化工具。通过......
  • Maven打包报错问题的解决-- No goals have been specified for this build. You must
    问题描述在使用maven执行打包操作时,出现了这样的错误:上面的图片是网上的图,我的图片忘记截图了;问题解决在我们创建的项目里面的pom.xml文件里面的dependencies标签后面,新建一个build标签,并在build标签里面放上这句代码:<defaultGoal>compile</defaultGoal>保存退出,然后重新......
  • 浅谈go反射
    基本概念支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。Go语言提供了reflect包来访问程序的反射信息。Refelct解析Refel......
  • 深度理解预训练语言模型
    在过去的几年里,预训练语言模型(PretrainedLanguageModels)在自然语言处理(NLP)领域取得了显著的突破。这些模型,尤其是大语言模型,通过在大量无标签文本上进行训练,从而在各种NLP任务中展示出卓越的性能。本文将深入探讨大语言模型的预训练,涉及基本概念原理、神经网络的语言模型、Transf......
  • AI 编程语言 Mojo 登陆 Mac 平台
        Mojo是 ModularAI公司开发的一种编程语言,专门面向AI 设计,号称比Python快68000倍。官方今日宣布,Mojo现已开放本地下载运行,除了编译器之外,MojoSDK还包括一整套开发者和 IDE工具,可以用于构建和迭代Mojo应用。Mojo号称将动态和静态语言的优点结合在一起......
  • Django+celery+eventlet+flower+redis异步任务创建及查询实现
    1.环境版本:Django3.2.12celery5.3.4eventlet0.33.3flower2.0.1redis3.5.3项目名称:new_project2.celery配置(settings.py)#celery#django-celery配置的部分#Broker配置,使用Redis作......
  • 入门篇-其之六-Java运算符(中)
    祝所有程序员,1024节日快乐!!!......