C语言初级阶段2——运算符、表达式和语句
运算符
分类
算术运算符、自增自减运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符、逗号运算符
算数运算符
1.定义:用于算术运算的特殊符号
2.基本使用(除了正负号是单目运算符以外其余都是双目运算符)
运算符 | 含义 | 举例 | 结果 | 优先级 | 结合性 |
---|---|---|---|---|---|
+ | 正号运算符 | +a | a的值 | 2 | 自右向左 |
- | 负号运算符 | -a | a的算数负值 | 2 | 自右向左 |
* | 乘法运算符 | a*b | a和b的乘积 | 3 | 自左向右 |
/ | 除法运算符 | a/b | a除以b的商 | 3 | 自左向右 |
% | 求余运算符 | a%b | a除以b的余数 | 3 | 自左向右 |
+ | 加法运算符 | a+b | a和b的和 | 4 | 自左向右 |
- | 减法运算符 | a-b | a和b的差 | 4 | 自左向右 |
自增自减运算符
1.定义
自增运算符是两个+连起来的符号,作用是使变量的值加一
自减运算符是两个-连起来的符号,作用是使变量的值减一
2.自增、自减运算符的使用
运算符 | 含义 | 结果 | 优先级 | 结合性 |
---|---|---|---|---|
++i | 在使用i之前,先使i的值加1 | 先执行i=i+1,再使用i的值 | 2 | 自右向左 |
--i | 在使用i之前,先使i的值减1 | 先执行i=i-1,再使用i的值 | 2 | 自右向左 |
i++ | 在使用i之后,先使I的值加1 | 先使用i的值,再执行i=i+1 | 2 | 自右向左 |
i-- | 在使用i之后,先使I的值减1 | 先使用i的值,再执行i=i-1 | 2 | 自右向左 |
运算符如果混在一块就按照优先级进行运算
关系运算符
1.定义:关系运算符是比较两边表达式的大小关系,其运算过后的结果为逻辑值,要么关系表达式为真(逻辑真),运算结果为非零值,要么表达式为假(逻辑假),其结果为0。
2.关系运算符的基本使用
关系运算符 | 含义 | 优先级 | 结合性 |
---|---|---|---|
< | 小于 | 6 | 自左向右 |
<= | 小于或等于 | 6 | 自左向右 |
> | 大于 | 6 | 自左向右 |
>= | 大于或等于 | 6 | 自左向右 |
== | 等于 | 7 | 自左向右 |
!= | 不等于 | 7 | 自左向右 |
()强制转换运算符优先级14
#include<stdio.h>
int main()
{
int b = (double)10;//10.000000
int c='a';
printf("%d\n",c);
double d = (int)'a';//97.000000
printf("%lf\n",d);
return 0;
}
逻辑运算符
1.定义:有与(&&)、或(||)、非(!)三种。
逻辑运算符用于判断运算符两边的表达式的逻辑关系,一般用于连接多个条件表达式。
2.逻辑运算符的使用
运算符 | 含义 | 举例 | 说明(不是真,就是假) | 优先级 | 结合性 |
---|---|---|---|---|---|
&& | 逻辑与(双目) | a&&b | 如果a和b都是真,其结果为真 | 11 | 自左向右 |
|| | 逻辑或(双目) | a||b | 如果a和b有一个及以上为真,其结果为真 | 12 | 自左向右 |
! | 逻辑非(单目) | !a | 如果a是真,则!a为假 | 2 | 自右向左 |
条件运算符(三目运算符)
1.定义:有两个运算符'?'和':'组成,必须一起使用。
要求有三个操作对象,称为三目运算符。
它的优先级为13,结合性自右向左。
首先计算表达式1的值,如果表达式1的值为非0值,则该条件表达式的值为表达式2的值;如果表达式1的值为0,则该条件表达式的值为表达式3的值。
2.基本格式:表达式1?表达式2:表达式3
#include<stdio.h>
int main()
{
int a = 10;
int b = 2;
int c = a > b ? a = 11 : b = 11;
printf("a=%d\nc=%d\n",a,c);
return 0;
}
位运算符
1.位运算符是针对数据的二进制进行运算的,其中包含左移“<<”、右移“>>”、按位非“~”、按位或"|"、按位与"&"、按位异或"^"这六种位运算,其只能对整型数据操作。
2.位运算符的基本使用
(1)左/右移运算符("<<"、">>"),基本格式:整数<<n、整数>>n,其用于将一个整数的二进制向左/向右移动n个二进制位。
(2)按位非运算符"",基本格式:整数,用于将一个整数的二进制各位取反,1变0,0变1.
(3)按位或'|'和按位'&',基本格式:整数|整数、整数&整数,用于将两个整数的各位二进制相或/相与。
(4)按位异或'',基本格式:整数整数,用于将两个整数的二进制相异或,遵循相同为0,相异为1的规则。
//位运算符:二进制运算符
#include<stdio.h>
int main()
{
//左移:左移相当于乘以2的几次方,移几位就乘以2的几次方。
int a = 10;
printf("a=%d\n",a<<3);
//右移:右移相当于除以2的几次方,移几位就除以2的几次方。
int b = 4;
printf("b=%d\n",b>>1);
//按位非(取反):二进制1变0,0变1,二进制最高位表示符号位,最高位0表示正数1表示负数。
int c = 10;
printf("c=%d\n",~c);
/*正数的原码反码补码完全一样
原码:带有符号位的真值表示。ex:-1的原码是10000001
反码:除符号位以外,其余按位取反所得到的结果。
补码:在反码的基础上加1。
*/
//按位或:对应位置,有1则为1,否则为0。
int d = 5,e = 3;
printf("%d\n",d|e);
//按位与:对应位置,都为1,结果才为1,否则为0。
int f = 5,g = 3;
printf("%d\n",f&g);
//按位异或:对应位置,相同为0,不同为1。
int h = 5,i = 3;
printf("%d\n",h^i);
return 0;
}
赋值运算符
1.定义:赋值符号'='就是赋值运算符,用于给变量赋值,和算术运算符组合可以构成复合赋值运算符。
2.赋值运算符的基本使用
赋值运算符 | 优先级 | 结合性 |
---|---|---|
= | 14 | 自右向左 |
+= | 14 | 自右向左 |
-= | 14 | 自右向左 |
*= | 14 | 自右向左 |
/= | 14 | 自右向左 |
%= | 14 | 自右向左 |
a += b ==> b=b+a;
a -= b ==> b=b-a
a = b ==> b=ba
a /= b ==> b=b/a
a %= b ==> b=b%a
逗号运算符
定义:逗号运算符就是一个逗号',',也叫顺序求值运算符,起到分隔的作用。它的优先级15级,结合方向是自左向右。
#include<stdio.h>
int main()
{
int a = (1,2,3,4,5,6,7,8,9);
printf("a=%d\n",a);//输出的值为9,输出结果为最后一个值
return 0;
}
求字节运算符
sizeof():求类型大小,自右向左,优先级14
#include<stdio.h>
int main()
{
printf("%d\n",sizeof(10));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(char));
return 0;
}
表达式
1.表达式的含义及组成:用运算符和括号将运算对象(也叫操作数)连接起来的、符合C语言语法规则、用于相关运算的式子,称为C语言表达式。运算对象包括常量、变量、函数等。
操作数:一个运算符要用到几个变量运算,比如需要两个数需要进行计算,那么就叫做双目运算符。
2.示例:例如一个合法的算数表达式:a*b/c-1.5+'a'
3.执行规则:在计算表达式的值时,应先按运算符的优先级别顺序执行,例如先乘除后加减。存在同一级别的运算符做运算时,则需要看运算符的结合性。(同一级别的运算符结合性是一致的,可以用小括号改变运算的优先级)
语句
1.含义及其构成:C语言语句一般是由表达式和语句结束符';'组成,是构成C语言函数的基本单位。
2.类型
(1)流程控制语句
①if()...else...
②for()...
③while()...
④do...while()
⑤continue
⑥break
⑦switch
⑧return
⑨goto
(2)函数调用语句:用于调用函数
如:printf();
(3)表达式语句:用于进行相关的运算。
如:由算数表达式组成的运算语句a*b/c-1.5+'a';
(4)空语句:只有一个语句结束符';'分号的语句,什么都不做。
如:;
(5)复合语句:用大括号括起来的语句块,是多条语句的组合,方便流程语句控制多条语句。
如:{
i=3;
j=4;
}