GO语言介绍
GO语言是什么
“Go是一种开源的程序设计语言,它意在使得人们能够方便地构建简单、可靠、高效率的软件”(来自go官网golang.org)
GO语言能干什么
1:网络编程,这一块目前应用最广,例如网站开发。
2:服务器编程,例如:处理日志,处理文件。(在网站开发的过程中都会涉及到)
3:区块链开发
环境安装
Go安装包下载网址:https://www.golangtc.com/download
有zip压缩版和msi安装版两个按本下载。(这里使用msi安装版,比较方便)。
运行msi安装文件,千万不要在安装路径中出现中文,一路Next。(关于安装路径在这里可以给学生重点强调,安装的位置以及不能出现中文名称)
GO程序
1:选择文件--->新建 弹出如下对话框。
注意:程序名称,和程序保存位置不能输入中文
2:新建完成后,开始输入代码。
第一行:每个Go源代码文件的开头都是一个package声明,表示该Go代码所属的包。
第三行代码:import表示导入,“fmt”是包名.
第五行代码:表示程序的入口,程序就是从该位置开始执行的,就像是教室的门口一样,注意该行代码是固定的写法,func 与main之间必须有空格,同时main后面必须带小括号,后面的一对大括号表示要完成的具体工作,也就是完成具体任务的代码必须写在一对大括号内。
func表示后面跟着的main是一个函数,函数必须有一对小括号。什么是函数呢?现在大家可以先理解与我们在数学中学到的函数是一样的,都是实现某个具体的功能,例如我们学习的三角函数等。Main函数实现的就是入口功能。再次强调一下,GO语言中的函数前面必须加上func这个单词,而且函数名称后面必须跟一对小括号。
第六行代码:就是使用了fmt包(注意具体使用的时候不需要加上双引号)中的Print函数,将要“hello go” 打印在屏幕上。这行代码要注意的是,fmt包与Print函数之间是用.(点连接的),该点是在半角输入法状态下输入,同时Print函数第一个字母P是大写的,不能写成小写,也就是说GO语言是区分大小写的,有很多同学在这里容易出错。将要输出的信息写在Print函数的括号内(注意括号也是在半角状态下输入的),并且用双引号包裹起来(双引号也是半角状态下输入的)
3:代码运行
我们第一个GO程序已经写完了,那么我们写的程序到底能否运行呢?是否有错误呢?下面我们执行我们的程序,程序的执行分为两步:
- 编译
编译的操作步骤:点击 “编译” 菜单,选择 “Build” (或者直接按快捷键Ctrl+B).编译的目的是检查我们写的代码是否出错,如果没有出错,那么会提示“成功”,并且在我们程序所在的目录生成一个.exe文件,该文件就是可执行文件。如果出错那么会显示错误信息,并且不会生成.exe文件
- 执行
编译操作完成后,我们就可以执行我们的代码了,选择“编译”菜单中的”Run”,执行。执行的就是编译所生成的.exe文件。这时,有同学可能就会问,如果我们不执行“Build”,直接执行”Run”,可以吗?不可以,因为不执行”Build”就无法生成”.exe”文件,那么也就无法执行。最后,我们为了方便高效可以选择“Run”,这个选项,将编译与执行放在一起操作。
4:其它注意事项
现在我们已经将我们写的第一个GO语言程序,执行成功了,但是还有以下几点内容需要在给大家强调一下:
- 强制左花括号{的放置位置,如果把左花括号{另起一行放置,这样做的结果是Go编译器报告编译错误。
- 每行代码占一行。
- 如果我们在我们已经成功的程序中,在加入一行输入,应该怎么加呢?直接输入fmt.Print("aaaaa"),然后直接执”Run”,发现并没有新的内容输出,原因是什么?应该怎么做?
- 关于换行输出的问题,前面的输出都没有换行,那么怎样进行换行输出呢?
三:注释
接下来,在看下面的代码,由于在一些代码行上有汉字,所以阅读起来就很方便。
注释分类
(1)单行注释
所谓单行注释,就是每次给一行代码加注释,你可以在任何地方使用以 // 开头的单行注释。
以//开头,//右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用
(2)多行注释
若果代码量比多,每行加注释,比较麻烦,可以使用多行注释。
四:变量
1:什么叫变量
所谓的变量简单的理解就是计算机用来存储数据的。我们可以理解变量就像我们去超市买商品时用到的购物车,我们先将商品从货架上拿下来,放到购物车中,结账时在从购物车中取出商品。计算机通过变量来保存数据实际上将数据存储到计算机的内存中,这里我们可以画一个图给大家理解一下。
计算机将内存划分成不同的区域,数据就是存储在这些区域中,那么怎样从这些区域中将数据取出来呢?计算机将每块区域都加上了一串数字,作为编号。通过该编号就可以将数据取出来了,但是问题是,这一串数字对我们程序员来说是非常难记忆的,
为了解决这个问题,我们可以通过变量的方式来表示存储的数据,如下图:
2:变量类型
我们现在理解了变量可以用来存储数据,但是我们要存储的数据类型是各种各样的,例如:整数,小数,文本等等。所以我们必须在定义变量时就要告诉计算机,定义的变量存储是什么类型的数据。那么在内存中就可以根据不同的类型来开辟不同的存储空间。
生活中关于“类型“的例子
3:变量声明
所谓声明变量就是创建一个变量,并且指定该变量存储什么类型的数据。
Go语言引入了关键字var,而类型信息放在变量名之后,示例如下:
注意:这里的输出是先将变量a的值取出来,然后在打印在屏幕上。所以不能给a这个变量加上引号。
4:变量初始化
现在我们虽然已经完成变量的定义了,但是该变量中存储的值,并不是我们想要的,我们希望变量中存储的是我们想要的值,应该怎么办?
我们可以在定义变量时,就给变量赋值,这种方式就是变量的初始化。示例如下:
注意:在这里我们将”=”符号,读作“赋值号”,不能读作“等号”。
问题:以下的程序输出的结果是多少?
var c int =20
fmt.Println(“c”)
同时再次强调一下在这里输出变量c的值,所以不能给变量c加上双引号。
5:变量赋值
除了在定义变量时,完成初始化以外,我们也可以在变量定义完后,再给变量赋值,也就是先声明后赋值,示例如下:
注意:上面的输出语句也可以只使用一个Println函数,具体如下:fmt.Println(a,b),中间用逗号进行分割
问题1:以下程序的输出结果是多少?
问题2:以下程序的输出结果是多少?
结论:变量可以重复赋值,一旦给一个变量赋了新值,那么变量中的老值就不复存在了
6:自动推导类型
在给变量赋值时,我们感觉非常麻烦,有没有更简单的给变量赋值的方式,我们可以使用自动推导类型,具体示例如下:
所谓自动推导类型,就是不用通过var 声明变量,不用指定类型,直接在变量名后面跟”:”号,同时完成赋值。那么GO会根据所赋的值自动推导出变量的类型。如果给num变量赋值为小数,那么该变量的类型为小数类型(浮点)。
通过比较,我们发现这种方式比前面的赋值方式要简单方便。这种方式,也是我们以后开发过程中最常用的方式。
7:多重赋值匿名变量
1)多重赋值
在上面的讲解中,我们给变量num赋值,采用了自动推导的方式,如果想一次使用自动推导的方式,给多个变量赋值,应该怎样实现呢?具体如下:
但是这种方式写起来非常的复杂,可以用如下的方式进行简化:
将1的值赋值给a,将10的值赋值给b,将30的值赋值给c.
(2)匿名变量
_匿名变量,丢弃数据不进行处理, _匿名变量配合函数返回值使用才有价值,目前大家只需要知道其语法,后面学到函数时,我们在强调匿名变量的使用场景。
现在我们先看一下匿名变量的语法:
8:数据置换
到目前为止,我们已经学习了什么是变量,变量的定义,以及变量的赋值。那么下面大家思考如下问题:
有两个变量a和b, a的值为10,b的值为20,交换两个变量的值?
(有两个杯子,都盛满了水,怎样交换两个杯子中的水)
使用传统方式实现
使用多重赋值的方式实现
多重赋值的方式交换两个变量的值,比通过第三个变量来进行变量交换更简单,代码也少。
9:输出格式
关于“输出“大家也都能够理解是什么意思了,就是将数据信息打印在电脑屏幕上。生活中也随处可见输出的场景。
在我们GO语言中进行输出,用到我们前面所讲解的两个函数:Print()和Println()
这个两个函数的区别就是Print()函数不换行,Println()换行输出。
关于输出这里有两个问题,需要给大家强调清楚。
- 我们前面的程序中,已经多次用到输出,不管是采用Print(),还是Println(),但是问题是,每次输出的数据结构不清晰,比较混乱。
例如如下程序:
该程序输出的结果是 1,10,20 .如果我们现在让另外一个程序员查看该结果,该程序员很难分清楚,1是来自哪个变量,2是来自哪个变量,3来自哪个变量,除非该程序员阅读代码。但是,大家想一下,如果该程序的代码量非常大,那么该程序员阅读代码是否要花费很长的时间呢?所以,建议采用如下输出:
双引号内的内容会原样输出。这样结构比较清晰,注意与变量名之间用逗号分隔。
- 除了使用Println()函数换行输出以外,还有另外一个函数Printf()也可以实现换行输出。示例如下:
运行以后,发现确实换行了。这种输出方式,就是格式化输出,%d,表示输出的是一个整数,第一个%d会被变量a的值替换,第二个%d会被变量b替换,其它类型的输出用什么去表示后面会给大家讲解。 “\n” 表示换行。
有同学可能就问了,这种换行输出方式比较麻烦,但是如果一次性有结构的输出多个变量的值,Println()输出就会比较麻烦,并且结构也会感觉比较混乱,还是以上面的代码为例,如下:
下面我们在给大家演示函数Printf()的输出:
通过对比发现Printf()函数一次性换行输出多个变量值,结构清晰。
10:接收输入
前面我们所写的所有的程序,都是直接给变量赋值,但是很多情况下,我们希望用户通过键盘输入一个数值,存储到某个变量中,然后将该变量的值取出来,进行操作。我们日常生活中也经常用到输入的场景:
咱们在银行ATM机器前取钱时,肯定需要输入密码,对不?
那么怎样才能让程序知道咱们刚刚输入的是什么呢??
大家应该知道了,如果要完成ATM机取钱这件事情,需要先从键盘中输入一个数据,然后用一个变量来保存,是不是很好理解啊!
那么我们GO语言怎样接收用户的键盘输入呢?如下:
在GO中我们用到了“fmt”这个包中的Scanf()函数来接收用户键盘输入的数据。当程序执行到Scanf()函数后,会停止往下执行,等待用户的输入,输入完成后程序继续往下执行。在这里重点要注意的是Scanf()函数的书写格式,首先也要用“%d”,来表示输入的是一个整数,输入完整数后存储到变量age中,注意这里age变量前面一定要加上“&”符号,表示获取内存单元的地址(前面我们说的内存存储区域的编号),然后才能够存储。
还有另外一种获取用户输入数据的方式,如下:
通过Scan函数接收用户输入,这时可以省略掉%d,这种写法更简单。
11:变量命名规范
在我们前面的编程中,我们定义变量时都是随意进行命名,但是在GO语言中,对变量的命名有一些规范性的要求,下面我们看一下具体的要求。
变量命名规范要求
名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。
除了上面提到的规范要求以外,GO语言自己特有的,具有一定含义的一些字符,也不能作为变量名称。例如,前面我们接触到的func, fmt,print等等,这些都是GO自带的,具有特殊含义的字符,我们称为关键字。
以上关键字都不能作为变量的名称。
此外,还有大约30多个预定义的名字,比如int和true等
见名知意
起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可 读性) 比如: 名字 就定义为 name , 定义学生 用 student
驼峰命名法
小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog
大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName
不过在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf
五:基础数据类型
前面我们写的程序中,用到的变量的类型都是整型,但是在我们GO语言中,还有很多其它的类型,
类型 |
名称 |
长度 |
零值 |
说明 |
bool |
布尔类型 |
1 |
false |
其值不为真即为假,不可以用数字代表true或false |
byte |
字节型 |
1 |
0 |
uint8别名 |
int, uint |
整型 |
- |
0 |
有符号32位或无符号64位 |
int8 |
整型 |
1 |
0 |
-128 ~ 127, |
uint8 |
整型 |
1 |
0 |
0 ~ 255 |
int16 |
整型 |
2 |
0 |
-32768 ~ 32767, |
uint16 |
整型 |
2 |
0 |
0 ~ 65535 |
int32 |
整型 |
4 |
0 |
-2147483648 到 2147483647 |
uint32 |
整型 |
4 |
0 |
0 到 4294967295(42亿) |
int64 |
整型 |
8 |
0 |
-9223372036854775808到 92233720368547758070 |
uint64 |
整型 |
8 |
0 |
到 18446744073709551615(1844京) |
float32 |
浮点型 |
4 |
0.0 |
小数位精确到7位 |
float64 |
浮点型 |
8 |
0.0 |
小数位精确到15位 |
string |
字符串 |
"" |
utf-8字符串 |
下面我们看一下几个非常重要的类型,其它类型随着课程的深入,后面会给大家讲解到。
1:布尔类型
在计算机中,我们用什么数据类型来表示一句话的对错,例如:在计算机中描述张三(20岁)比李四(18)小,这句话的结果?
布尔类型的变量取值要么是真(true),要么是假(false),用bool关键字来进行定义。示例如下:
指定格式的输出:
布尔类型主要用于后面讲解的条件判断,关于条件判断,我们在这里先举一个生活中的案例,大家可以理解一下:
2:浮点型
有格式的输入与输出
注意:varf1float32
f1=12
f2:=12.0//如果不加小数点,f2会被推导为整型而不是浮点型
3:字符类型
(1)字符基本输入与输出
所谓字符类型是用单引号括起来的单个字符,关于字符的定义使用如下:
输入一个字符,如下所示:
- 字符第二种输入与输出方式。
这里定义了,ch是一个字符类型,赋值却是一个整数97,打印的结果是小写字符’a’.
原因是:计算机不能直接存储字符类型,只能转成数字存储,但是为什么小写字符‘a’,对应的整数是97呢?因为,计算机是根据’ASCII’码来存储。(这里只是简单介绍ASCII)
注意强调:
问题,以下代码输出的结果是多少?
转义字符
字符除了我们常见的字符‘a’,字符’b’等等以外,还有一些特殊的字符,例如我们讲解的’\n’, 它的作用是什么?换行,不会在屏幕上输出具体的内容。这种字符我们称为转义字符(具有特殊含义),那么除了’\n’字符以外,还有哪些是我们以后编程中经常用到的转义字符呢?
\":表示一个英文半角的双引号
t:表示一个tab键的空格(可以用来对输出的内容进行排版)
\\:表示一个\(主要用在表示磁盘目录上,后面我们讲解文件操作时,经验要根据磁盘目录获取文件然后进行读取,写入等操作)
4:字符串类型
用单引号括起来的单个字符是字符类型,用双引号括起来的字符是字符串类型。“a”是字符还是字符串呢?
下面是关于字符串的定义使用:
字符串输入:
5:字符与字符串区别
关于字符与字符串的区别:
6:fmt输出输入
我们前面在输出与输入字符串类型,字符类型,整型等都指定了对应的格式化,那么go语言中还有哪些格式化呢?
格式 |
含义 |
%% |
一个%字面量 |
%b |
一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c |
字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%d |
一个十进制数值(基数为10) |
%f |
以标准记数法表示的浮点数或者复数值 |
%o |
一个以八进制表示的数字(基数为8) |
%p |
以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 |
%q |
使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字 |
%s |
字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
%t |
以true或者false输出的布尔值 |
%T |
使用Go语法输出的值的类型 |
%x |
以十六进制表示的整型值(基数为十六),数字a-f使用小写表示 |
%X |
以十六进制表示的整型值(基数为十六),数字A-F使用小写表示 |
大家目前先掌握该表格中,标注红色的内容。在红色内容中,我们没有用到的是%T,作用是输出值的类型,示例如下:
六:常量
1:常量定义使用
在讲解常量之前,我们要先简单说一下我们前面讲解的变量。我们都知道,变量是用来存储数据,并且变量里面存储的值是可以在程序运行时随时发生变化的,例如如下案例,结果输出是多少?
这个程序我们前面已经做过,最终的输出结果是20,因为重新给number变量赋值。
但是,常量里面的值确定好后,后面是不允许修改的。下面看一下关于常量的定义使用:
常量的命名规范与变量命名规范一致。
问题:什么场景下会用到常量呢?
在程序开发中,我们用常量存储一直不会发生变化的数据,例如:π,身份证号码等。像这类的数据,在整个程序中运行中都是不允许发生改变的。
2:字面常量
所谓字面常量(literal),是指程序中硬编码的常量,如:
3:iota枚举
常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。
注意:在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。
具体使用方式如下:
七:运算符
在前面的课程中,我们已经学习了变量,常量,那么接下来我们学习一下运算符。GO语言中常见的运算符有算术运算符,赋值运算符,关系运算符,逻辑运算符等。
1:算术运算符
运算符 |
术语 |
示例 |
结果 |
+ |
加 |
10 + 5 |
15 |
- |
减 |
10 - 5 |
5 |
* |
乘 |
10 * 5 |
50 |
/ |
除 |
10 / 5 |
2 |
% |
取模(取余) |
10 % 3 |
1 |
++ |
后自增,没有前自增 |
a=0; a++ |
a=1 |
-- |
后自减,没有前自减 |
a=2; a-- |
a=1 |
算术表达式:由算术运算符连接起来的式子.如:1+1 a-b(变量ab前面已声明并赋初值)
下面以a=10 ,b=20为例进行计算
自增与自减操作
a++等价于a=a+1
注意:GO语言中没有前自增,这是与其它编程语言不同的地方。
(2)演示:某学生三门课成绩为,语文:90 数学:80 英语:67,编程求总分和平均分.
虽然已经计算出总分与平均分了,但是我们可以对上面的程序进行优化,怎么优化呢?示例如下:
以上程序大家需要注意几点:
(2.1)该程序比第一种实现减少了变量的定义,可以减少对内存的占用,所以变量不是定义越多越好。
-
- 注意运算优先级:先乘除,后加减,有括号先算括号里的,相同级别的从左至右运算 int a=((1+5)+3)*2
- 小括号可以无限制的套用,但一定要成对出现
(3)类型转换:
现在我们把上面提的需求修改一下:语文:90 数学:80 英语:69,编程求总分和平均分.
只是将英语的成绩进行了修改,还是计算总分和平均分
但是平均分的计算结果还是79分,为什么没有小数呢?
现在将程序进行如下修改:
Go语言中不允许隐式转换,所有类型转换必须显式声明(强制转换),而且转换只能发生在两种相互兼容的类型之间
- 思考题:
(4.1)请阅读以下程序,如果该程序正确,请说出程序运行的结果,如果有错误,请说出错误原因,并指明怎样进行修改?
(4.2)以下程序,如果正确请说出程序运行的结果,如果错误,请说出错误原因,并指明怎样进行修改?
(4.3)以下程序,如果正确请说出程序运行的结果,如果错误,请说出错误原因,并指明怎样进行修改?
(5)练习:
练习1:定义两个数分别为100和20,打印出两个数的和。
练习2:计算半径为5的圆的面积和周长并打印出来.(pi为3.14)面积:pi*r*r; Perimeter(周长)
练习3:某商店T恤(T-shirt)的价格为35元/件,裤子(trousers)的价格为120元/条.小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?
打8.8折后呢?
注意:以上代码定义多个变量,主要目的是让大家理解类型转换
练习4:如上题中打完8.8折后出现小数,商店为了结算方便,只收用户整数部分的钱,如本应收用户303.6,现在只收用户303元,应该如何做?
强制类型转换总结
强制类型转换的语法格式:
数据类型名(待转换的值)
例如:
强制类型转换,数据类型一定要相兼容下面的写法对吗?
谨记:int 转float强制转换,多小数
float转int强制转换,丢精度.
补充:关于“+”运算符,除了可以完成两个数字相加以外,也可以链接两个字符串,如下:
2:赋值运算符
关于赋值运算符前面我们已经使用过多次,赋值运算符 = ,
varint num=9;num=num+1; 这里的=号是赋值运算符,不是数学义意上的相等.
常见的赋值运算符如下,前面我们使用的=是普通赋值,+=,-=等我们称为“复合赋值运算符”
运算符 |
说明 |
示例 |
= |
普通赋值 |
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 |
3:关系运算符
关系运算符我们又称为比较运算符,听到比较这个词,大家想到的就是比较大小,例如:
大象的重量(1500)>老鼠的重量(1)
兔子的寿命(3)>乌龟的寿命(1000)
我的年龄(20)==你的年龄(20)
提问:比大比小的结果是什么?
结果是对或者是错,在GO语言中,怎样表示对于错呢?
关系运算的结果是布尔类型的。
bool值只有两个
真:true
假:false
GO语言中常见的关系运算符如下:
运算符 |
术语 |
示例 |
结果 |
== |
相等于 |
4 == 3 |
false |
!= |
不等于 |
4 != 3 |
true |
< |
小于 |
4 < 3 |
false |
> |
大于 |
4 > 3 |
true |
<= |
小于等于 |
4 <= 3 |
false |
>= |
大于等于 |
4 >= 1 |
true |
由以上关系运算符链接的表达式我们称为关系表达式。
关系运算符具体使用方式如下:
4:逻辑运算符
(1)常见的逻辑运算符如下:
运算符 |
术语 |
示例 |
结果 |
! |
非 |
!a |
如果a为假,则!a为真; 如果a为真,则!a为假。 |
&& |
与 |
a && b |
如果a和b都为真,则结果为真,否则为假。 |
|| |
或 |
a || b |
如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
有逻辑运算符连接的表达式叫做逻辑表达式
通过以上表格我们发现:逻辑表达式的结果同样也是bool类型
逻辑运算符两边放的一般都是关系表达式或者bool类型的值。
例如:
5>3 &&true
3>5||false
- 总结:
(3.1)逻辑与 &&
表达式1&&表达式2
表达式1 |
表达式2 |
表达式1&&表达式2 |
True |
True |
True |
False |
True |
False |
True |
False |
False |
False |
False |
false |
(3.2)逻辑或 ||
表达式1||表达式2
表达式1 |
表达式2 |
表达式1||表达式2 |
True |
True |
True |
True |
False |
True |
False |
True |
True |
False |
False |
false |
(3.3)逻辑非 !
!表达式
表达式 |
!表达式 |
True |
False |
False |
true |
5:其他运算符
运算符 |
术语 |
示例 |
说明 |
& |
取地址运算符 |
&a |
变量a的地址 |
* |
取值运算符 |
*a |
指针变量a所指向内存的值 |
关于指针的应用,我们后面会重点给大家讲解,目前大家只需要掌握&
6:运算符优先级
(1)上面我们已经将运算符介绍完了,下面说一下它们的运算符优先级。
在Go语言中,一元运算符(一些只需要一个操作数的运算符称为一元运算符(或单目运算符)。)拥有最高的优先级,二元运算符的运算方向均是从左至右。
下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
如下图所示:
优先级 |
运算符 |
7 |
^ ! |
6 |
* / % << >>&&^ |
5 |
+ - | ^ |
4 |
== != < <= >= > |
3 |
<- |
2 |
&& |
1 |
|| |
上图中部分运算符现在没有讲解到,后期用到时再给大家具体讲解,目前大家需要掌握的是算术,赋值,关系,逻辑,取地址运算符。
- 案例练习:
写下判断闰年的表达式,设待判断的年份变量为year.
闰年的判定(符合下面两个条件之一):
年份能够被400整除.(2000)
年份能够被4整除但不能被100整除.(2008)
让用户输入一个年份,如果是润年,则输出true,如果不是,则输出false.
2100/1600/1800/2009年是闰年吗?
注意:逻辑与的优先级要高于逻辑或。