C语言笔记---(4)运算符及表达式篇

首页 / 👑C语言 / 正文

一、表达式

1.表达式是什么

一个或多个运算对象与零个或多个运算符组成的式子叫做表达式

每个表达式都有一个结果
printf("%d\n" 5+10);    //表达式结果为:15

2.表达式语句

在表达式后边加上;就构成了表达式语句,C语言中表达式不能单独存在,必须以表达式语句的方式存在。

100;
5+10;
a/b;
a*10/b+c;
printf("%d\n" 5+10);    //5+10表达式为什么后边没有;号,是因为5+10在这个语句中是函数调用表达式的子表达式。
函数名加括号运算符构成了一个函数表达式。

二、运算符

在C语言中,运算符有非常的多。它内置的运算符丰富到令人头皮发麻,但同时给了我们对代码的更多操作性。

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

1.算术运算符

算术运算符专门用于算术运算,主要有下面几种。

一元运算符指的是只有一个运算对象,反之,二元运算符是指有两个运算对象。
  • +:正值运算符(一元运算符)
  • -:负值运算符(一元运算符)
  • +:加法运算符(二元运算符)
  • -:减法运算符(二元运算符)
  • *:乘法运算符
  • /:除法运算符
  • %:余值运算符
名称运算符号描述举例
正值运算符+表示这个操作数为正数+12(它是+12)
负值运算符-表示这个操作数为负数-12(它是-12)
加法运算符+添加两个操作数2+10=12
减法运算符-从第一个减去第二个操作数12-2=10
自增运算符++自增运算符将整数值增加1int a = 1; a++
自减运算符--自减运算符将整数值减小1int a = 1; a--
乘法运算符*将两个操作数相乘2*6=12
除法运算符/将两个操作数相除12/2=6
余值运算符(求余运算符)%将操作数相除后取余12%5=2

(1)+ -

这两个运算符既可以当做一元运算符,也可以当做二元运算符
所谓一元运算符,指的是只需要一个运算数就可以执行。一元运算符-用来改变一个值的正负号。

int num = -1;
int num2 = +num;
这段代码中的-1变为了-1。正号+对正负值没有什么影响,+不会改变正负值,可加可不加。

二元运算符+ -也就是用他们来完成加减法。

int x = 6 + 6;
int y = 13 - 1;

(2)*乘法运算符

运算符*用来完成乘法。

int num = 2 * 6;
printf("%i", num); // 输出12
// 或者
int num = 6;
printf("%i\n", num * num);//输出 36

(3)/除法运算符

运算符/用来完成除法。注意,两个整数相除,得到还是一个整数。

float x = 6 / 4;
printf("%f\n", x); // 输出 1.000000

上面示例中,尽管变量x的类型是float(浮点数),但是6 / 4得到的结果是1.0,而不是1.5。原因就在于 C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。

如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时 C 语言就会进行浮点数除法。

float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%f\n", x); // 输出 1.500000

上面示例中,6.0 / 4表示进行浮点数除法,得到的结果就是1.5

小测试:

int score = 5;
score = (score / 20) * 100;
printf("%i", score);

这段代码的运行结果是什么?
如果你的运算结果为25,那么恭喜你,错了。回去好好再看一次笔记
如果你的运算结果为0,那么恭喜你,对了。继续看笔记吧。

为了得到预想的结果(运算结果为25),可以将除数20改成20.0,让整除变成浮点数除法。

score = (score / 20.0) * 100;

(4)%求余运算符(取模运算符)

运算符%表示求模(取余)运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。

int x = 12 % 5;
printf("%i", x); // 2

负数求模的规则是,结果的正负号由第一个运算数的正负号决定。

11 % -5 // 1
-11 % -5 // -1
-11 % 5 // -1

上面示例中,第一个运算数的正负号(11或-11)决定了结果的正负号。

(5)赋值运算的简写形式

如果变量对自身的值进行算术运算,C 语言提供了简写形式,允许将赋值运算符和算术运算符结合成一个运算符。

  • +=
  • -=
  • *=
  • /=
  • %=

下面是一些例子。

i += 3;  // 等同于 i = i + 3
i -= 8;  // 等同于 i = i - 8
i *= 9;  // 等同于 i = i * 9
i /= 2;  // 等同于 i = i / 2
i %= 5;  // 等同于 i = i % 5

2.自增、自减运算符

C 语言提供两个运算符,对变量自身进行+ 1和- 1的操作

  • ++:自增运算符
  • --:自减运算符
i++; // 等同于 i = i + 1
i--; // 等同于 i = i - 1

1.前置自增(减)运算符

前置运算——运算符都放在变量之前:++变量名--变量名,如++i --i。它先使变量的值增或减1,再以变化后的值参与其他运算,即先自增(或先自减)后运算。

2.后置自增(减)运算符

后置运算——运算符放在变量之后:变量名--变量名++如:i++ i--。它使变量先参与其他运算,再使变量的值增或减1,即先运算后自增(或后自增)。

3.常用运算符优先级

标记操作符类型优先级
++--自增、自减后缀16
++--自增、自减前缀15
+-正号,负号单目15
*/%乘、除、取余双目13
+-加、减双目12
=赋值双目2

3.关系运算符

  1. < 小于
  2. <= 小于或等于
  3. > 大于运算符
  4. >= 大于或等于
  5. == 等于
  6. !=不等于

关系运算符优先级.png

4.逻辑表达式

(1)逻辑运算符

运算符含义含义
&&逻辑与
` `逻辑或
!逻辑非

逻辑运算符优先级.png

(2)逻辑表达式

C语言计算机逻辑表达式的值判断量的真假
1非0
00

总结

标记操作符类型优先级
++ --自增、自减后缀16
++ --自增、自减前缀15
!逻辑非单目15
+ -正号、负号单目15
* / %乘、除、取余双目13
+ -加、减双目12
< > <= >=关系双目10
== !=逻辑与双目9
` `逻辑或双目5
?:条件三目3
=赋值双目2
无标签
评论区
头像
文章目录
Server provider Google Analytics