当前位置: 首页 > news >正文

Golang学习+深入(四)-运算符

目录

一、概述

1、算数运算符

2、关系运算符

3、逻辑运算符

4、赋值运算符

5、运算符优先级

6、位运算符

7、其他运算符

二、进制

1、进制转换

1、其他进制转十进制

2、十进制转其他进制

3、二进制转其他进制

4、其他进制转二进制

5、二进制在运算中的说明

三、原码、补码、反码


一、概述

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等

  1. 算数运算符
  2. 赋值运算符
  3. 比较运算符/关系运算符
  4. 逻辑运算符
  5. 位运算符
  6. 其他运算符

1、算数运算符

算数运算符是对数值类型的变量进行运算的,比如:加减乘除。在Go程序中使用的非常多。

  1. +:正号
  2. -:负号
  3. +:加
  4. -:减
  5. *:乘
  6. /:除
  7. %:取模(取余)
  8. ++:自增
  9. --:自减
  10. +:字符串相加

注:

  1. 对于除号"/",它的整数除和小数除是有区别的,整数之间做除法时,只保留整数部分而舍弃小数部分。例:x :=19/5,结果是 3
  2. 当对一个数取模时,可以等价 a%b=a-a/b*b
  3. Golang的自增和自减只能当作一个独立语言使用,不能这样使用 b:=a++ 或者 b:=a--
  4. Golang的++和--只能写在变量后面,不能写在变量的前面,即:只有a++ a--没有++a --a
  5. Golang的设计者去掉c/java中的自增自减的容易混淆的写法,让Golang更加简洁,统一。

2、关系运算符

  1. 关系运算符的结果都是bool型,也就是要么是true,要么是false

  2. 关系表达式经常用在if结构的条件中或循环结构的条件中

  3. '==':相等于

  4. '!=':不等于

  5. '<':小于

  6. '>':大于

  7. '<=':小于等于

  8. '>=':大于等于

package main
import ("fmt"
)func main() {x :=19/5fmt.Println(x)var a = 5var b = 9fmt.Println("a%b=",a%b)fmt.Println("a-a/b*b=",a-a/b*b)var n1 int = 5var n2 int = 9fmt.Println(n1==n2)fmt.Println(n1!=n2)fmt.Println(n1<n2)fmt.Println(n1>n2)fmt.Println(n1<=n2)fmt.Println(n1>=n2)
}

3、逻辑运算符

用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个bool值。

  1. &&:逻辑与运算符。如果两边的操作数都是True,则为True,否则,为False。
  2. ||:逻辑与运算符。如果两边的操作数有一个True,则为True,否则,为False。
  3. !:逻辑非运算符。如果条件为True,则逻辑为False,否则为True。
  • &&也叫短路与,如果第一个条件为False,则第二个条件不会判断,最终结果为false
  • ||也叫短路或,如果第一个条件为true,则第二个条件不会判断,最终结果为true

4、赋值运算符

赋值运算符就是将某个运算后的值,赋给指定的变量。

  1. =:将一个表达式的值赋给左值,C=A+B
  2. +=:相加后再赋值,C+=A等于C=C+A
  3. -=:相减后再赋值,C-=A等于C=C-A
  4. =:相乘后再赋值,C=A等于C=C*A
  5. /=:相除后再赋值,C/=A等于C=C/A
  6. %=:求余后再赋值,C%=A等于C=C%A
  7. <<=:左移后再赋值,C<<=2等于C=C<<2
  8. ">>=":右移后再赋值,C>>=2等于C=C>>2
  9. &=:按位与后再赋值,C&=2等于C=C&2
  10. ^=:按位异或后再赋值,C^=2等于C=C^2
  11. |=:按位或后再赋值,C|=2等于C=C|2
  • 运算顺序从右往左
  • 赋值运算符的左边,只能是变量,右边可以是变量、表达式、常量值
面试题:
有两个变量,a和b,要求将其进行交换,但是不允许使用中间变量,最终打印结果。
package main
import ("fmt"
)
func main() {var a = 3var b = 5a=a+bb=a-ba=a-bfmt.Println(a,b)
}

5、运算符优先级

运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下,上面优先于下面

只有单目运算符、赋值运算符是从右向左运算的。

分类描述关联性
后缀()[]->.++ --左到右
单目+ - ! ~ (type)* & sizeof右到左
乘法* / %左到右
加法+ -左到右
移位<< >>左到右
关系< <= > >=左到右
相等== !=左到右
按位与&左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或||左到右
赋值运算符=: += -= *= /= %= <<= >>= &= ^= |=右到左
逗号,左到右

6、位运算符

  1. &:按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。运算规则是:同时为1,结果为1,否则为0.
  2. |:按位或运算符"|"是双目运算符。其功能是参与运算的两数各对应的二进位相或。运算规则是:有一个为1,结果为1,否则为0.
  3. ^:按位异或运算符"^"是双目运算符。其功能是参与运算的两数各对应的二进位相异或。运算规则是:当二进位不同时,结果为1,否则为0.
  4. <<:左移运算符"<<"是双目运算符。其功能把"<<"左边的运算数的各二进制位全部左移若干位,高位丢失,低位补0.左移n位就是乘以2的n次方。
  5. ">>":右移运算符">>"是双目运算符。其功能把">>"左边的运算数的各二进制位全部右移若干位.右移n位就是除以2的n次方。
package main
import ("fmt"
)
func main() {var a int = 1 >> 2var b int = -1 >> 2var c int = 1 << 2var d int = -1 << 2fmt.Println("a=",a)fmt.Println("b=",b)fmt.Println("c=",c)fmt.Println("d=",d)fmt.Println(2&3)fmt.Println(2|3)fmt.Println(13&7)fmt.Println(5|4)fmt.Println(-3^3)
}

7、其他运算符

  1. &:返回变量存储地址,&a 将给出变量a的实际地址
  2. *:指针变量, *a 是一个指针变量

Go语言明确不支持三元运算符

Golang的设计理念:一种事情有且只有一种方法完成

二、进制

对于整数,有四种表示方式:

  1. 二进制:0,1,满2进1.
  2. 十进制:0-9,满10进1.
  3. 八进制:0-7,满8进1,以数字0开头表示。
  4. 十六进制:0-9及A-F,满16进1,以0x或0X开头表示。此处A-F不区分大小写。如:0x21AF+1=0x21B0
package main
import ("fmt"
)
func main() {var i int = 5fmt.Printf("二进制输出i=%b\n",i)var j int = 011fmt.Println("八进制j=",j)var k int = 0x11fmt.Println("16进制k=",k)
}

1、进制转换

1、其他进制转十进制

1.1、二进制转十进制

规则:从最低位开始(右边的),将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

1.2、八进制转十进制

规则:从最低位开始(右边的),将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。

1.3、十六进制转十进制

规则:从最低位开始(右边的),将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

2、十进制转其他进制

2.1、十进制转二进制

规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

2.2、十进制转八进制

规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。

2.3、十进制转十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

3、二进制转其他进制

3.1、二进制转八进制

规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可。

将二进制:11010101转成八进制。11010101=0325

3.2、二进制转十六进制

规则:将二进制数每四位一组(从低位开始组合),转成对应的十六进制数即可。

将二进制:11010101转成十六进制。11010101=D5

4、其他进制转二进制

4.1、八进制转二进制

规则:将八进制数每1位,转成对应的一个3位的二进制数即可。

将0237转成二进制. 0237=10011111

4.2、十六进制转二进制

规则:将十六进制数每1位,转成对应的一个4位的二进制数即可。

将0x237转成二进制. 0x237=1000110111

5、二进制在运算中的说明

二进制是逢2进位的进位制,0、1是基本算符。

现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

三、原码、补码、反码

对于有符号的而言:

  1. 二进制的最高位是符号位:0表示正数,1表示负数。
  2. 正数的原码,反码,补码都一样。
  3. 负数的反码=它的原码符号位不变,其他位取反(0-->1,1-->0)。
  4. 负数的补码=它的反码+1。
  5. 0的反码,补码都是0。
  6. 在计算机运算的时候,都是以补码的方式来运算的
1===>原码:[0000 0001]反码:[0000 0001]补码:[0000 0001]
-1==>原码:[1000 0001]反码:[1111 1110]补码:[1111 1111]
按位与&:两位全为1,结果为1,否则为0
按位或|:两位有一个为1,结果为1,否则为0
按位异或:两位一个为0,一个为1,结果为1,否则为0
计算:
2&3=2
2的补码:[0000 0010] 
3的补码:[0000 0011]
2&3的补码:[0000 0010]=2
2|3=3
2的补码:[0000 0010] 
3的补码:[0000 0011]
2|3的补码:[0000 0011]=3
2^3=1
2的补码:[0000 0010] 
3的补码:[0000 0011]
2^3的补码:[0000 0001]=1
-2^2=-4
-2的原码:[1000 0010]反码:[1111 1101]补码:[1111 1110][1111 1110]
2的补码:[0000 0010]
-2^2的补码:[1111 1100]反码:[1111 1011]原码:[1000 0100]=-4
>>、<<右移和左移运算规则:
右移运算符>>:低位溢出,符号位不变,并用符号位补溢出的高位
左移运算符<<:符号位不变,低位补0
1>>2=0
1的补码:[0000 0001] 右移[0000 0000]=0
1<<2=4
1的补码:[0000 0001] 左移[0000 0100]=4

干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

相关文章:

Golang学习+深入(四)-运算符

目录 一、概述 1、算数运算符 2、关系运算符 3、逻辑运算符 4、赋值运算符 5、运算符优先级 6、位运算符 7、其他运算符 二、进制 1、进制转换 1、其他进制转十进制 2、十进制转其他进制 3、二进制转其他进制 4、其他进制转二进制 5、二进制在运算中的说明 三、…...

C++ 运算符重载:C++ 运算符重载的高级技巧和最佳实践

C 运算符重载&#xff1a;深入剖析与实现I. 引言A. 什么是运算符重载B. 为什么要使用运算符重载C. C运算符重载的优缺点II. 运算符重载基本概念A. 运算符重载的定义B. 运算符重载的分类1. 一元运算符2. 二元运算符C. 限制与规范1. 无法重载的运算符2. 重载运算符的规范与建议II…...

软件测试找了2个月了,找不到工作怎么办?

那就问你一些问题&#xff0c;看你能回答多少 1:测试流程是什么&#xff1f;测试用例包含哪些内容&#xff1f;测试用例设计都有哪些&#xff1f;给你一个一次性杯子&#xff0c;你会怎么测试&#xff1f; 2:数据库怎么查看前十行数据&#xff1f;内连接和外连接的区别&#…...

满足高并发的TB API接口接入说明

大家都知道&#xff0c;淘宝的反爬虫机制十分严&#xff0c;而很多时候&#xff0c;没办法高效的拿到数据内容响应终端需求&#xff0c;而依赖爬虫就会造成动不动就出现滑块验证&#xff0c;让人很无解。这里我们分享让采集不再出现任何滑块验证码&#xff0c;完全解密通过&…...

Themis Pro版将正式推出,3次迭代到底在酝酿什么?

最近在社区内讨论火热的Themis Pro&#xff0c;终于要来了&#xff01;4月2日Themis官网&#xff08;themis.capital &#xff09;全新升级改版上线&#xff0c;并宣布Themis Pro 即将于4月下旬正式推出。 Themis Pro 是基于Ve(3,3&#xff09;模型在FVM公链上搭建的新一代去中…...

边缘检测和轮廓检测

边缘检测 什么是边缘: * 图像中像素值发生剧烈变化的位置(高频信息区域) * 这些区域往往都是图像的边缘 方法:滤波、形态学处理等 边缘的作用 本质上,边缘是不同区域之间的边界。 其中包含了图像的区域信息,形状信息 一方面,可以利用这些信息来作为特征对图像进行理解(甚至…...

二分法模板以及例题 (三)

167. 两数之和 II - 输入有序数组 输入&#xff1a;numbers [2,7,11,15], target 9 输出&#xff1a;[1,2]。 解释&#xff1a;2 与 7 之和等于目标数 9 。因此 index1 1, index2 2 。返回 [1, 2] 解题思路&#xff1a;首先散列表可以直接秒了&#xff0c;双指针也秒了 二分…...

向下转型和向上转型(易理解)

向上转型&#xff1a;父类引用指向子类对象 定义A B C D 四个类&#xff0c;分级继承 对象 a 的编译类型是A&#xff0c;运行类型是B&#xff0c;A是B的父类&#xff0c;父类的引用 a 指向的是B这个子类的对象&#xff0c;因为new的是B这个类&#xff0c;创建的也就是B这个类的…...

华为OD机试用JS实现 -【机智的外卖员】(2023-Q2 押题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:机智的外卖员 题目描述: 外…...

同态加密:一个基于多方计算的CKKS方案

这篇文章主要介绍LattiGo团队搞出来的一个多方同态加密的工作。个人觉得比较优雅&#xff0c;而且有库支持&#xff0c;方便把玩&#xff0c;所以记一下。 在攒毕业论文的时候整了这么个看上去很烂&#xff0c;但是&#xff08;个人觉得&#xff09;有一点意思的烂活&#xff0…...

最小生成数

题目描述 如题&#xff0c;给出一个无向图&#xff0c;求出最小生成树&#xff0c;如果该图不连通&#xff0c;则输出 orz。 输入格式 第一行包含两个整数 &#xfffd;,&#xfffd;N,M&#xff0c;表示该图共有 &#xfffd;N 个结点和 &#xfffd;M 条无向边。 接下来 …...

【模板】树状数组

目录&#xff1a; 单点修改&#xff0c;区间查询&#xff1a; 题目描述&#xff1a; lowbit()运算&#xff1a; 插入、修改单点数据&#xff1a; 计算前缀和&#xff1a; 完整代码&#xff1a; 区间修改&#xff0c;单点查询&#xff1a; 计算差分数组&#xff1a; 计算每个点的…...

网站都变成灰色了,怎么实现的?

有些时候我们需要把网站页面变成黑白色或灰色&#xff0c;特别是对于一些需要悼念的日子&#xff0c;以及一些影响力很大的伟人逝世或纪念日的时候&#xff0c;都会让网站的全部网页变成灰色&#xff08;黑白色&#xff09;&#xff0c;以表示我们对逝者或者英雄的缅怀和悼念。…...

NeRF详解

论文标题&#xff1a;《NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis》 论文地址&#xff1a;https://arxiv.org/abs/2003.08934 推荐代码&#xff1a;https://github.com/yenchenlin/nerf-pytorch 文章目录前言隐式表达NeRF的训练位置编码体渲染&…...

Java之静态代码块和静态类、静态导入

前言 在上一篇文章中给大家讲解了static静态关键字&#xff0c;以及静态变量、静态常量和静态方法等内容。但是关于static&#xff0c;还有其他的一些内容&#xff0c;比如静态类、静态代码块和静态导入等&#xff0c;接下来给大家继续分析讲解。我们一起来看看这些内容都是怎…...

Python3 File isatty() 、os.chflags()方法

Python3 File isatty() 方法Python3 File(文件) 方法概述isatty() 方法检测文件是否连接到一个终端设备&#xff0c;如果是返回 True&#xff0c;否则返回 False。语法isatty() 方法语法如下&#xff1a;fileObject.isatty(); 参数无返回值如果连接到一个终端设备返回 True&…...

【SH_CO_TMT_PACKAGE保留60天数据和增加索引】

1. 保留60天数据 DELETE FROM SH_CO_TMT_PACKAGE WHERE CREATED_ < SYSDATE - 195SH_CO_TMT_PACKAGE 这个表是tmt的数据统计表,数据量极大,大概有1500W 里头的数据都是从TMT机台运行状况表(比如满管率,断丝数,下次落纱时间)同步过来的。 朗通针对这些数据,做了个…...

2022蓝桥杯省赛——数位排序

问题描述 小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。 例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位之和 13 。 又如, 6 排在 …...

弥散磁共振成像在神经科学中的应用

导读弥散加权成像技术突破了神经科学的界限&#xff0c;使我们能够检查活体人脑的白质微观结构。这为基本的神经科学问题提供了答案&#xff0c;开启了一个以前基本上难以接近的新研究领域。本研究简要总结了神经科学历史上提出的关于大脑白质的关键问题。然后&#xff0c;阐述…...

多进程(python)

参考&#xff1a; https://www.liaoxuefeng.com/wiki/1016959663602400/1017627212385376 个人封装的python多进程处理类&#xff0c;跑满CPU&#xff0c;优化性能 概念 进程: 对于操作系统来说&#xff0c;一个任务就是一个进程&#xff08;Process&#xff09;&#xff0c;…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...