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

2024-08-23 20:20:11 浏览数 (1)

一、表达式

1.表达式是什么

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

每个表达式都有一个结果

C 代码:

代码语言:javascript复制
printf("%dn" 5 10);    //表达式结果为:15

2.表达式语句

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

C 代码:

代码语言:javascript复制
100;
5 10;
a/b;
a*10/b c;

C 代码:

代码语言:javascript复制
printf("%dn" 5 10);    //5 10表达式为什么后边没有;号,是因为5 10在这个语句中是函数调用表达式的子表达式。

函数名加括号运算符构成了一个函数表达式。

二、运算符

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

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

1.算术运算符

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

一元运算符指的是只有一个运算对象,反之,二元运算符是指有两个运算对象。

  • :正值运算符(一元运算符)
  • -:负值运算符(一元运算符)
  • :加法运算符(二元运算符)
  • -:减法运算符(二元运算符)
  • *:乘法运算符
  • /:除法运算符
  • %:余值运算符

名称

运算符号

描述

举例

正值运算符

表示这个操作数为正数

12(它是 12)

负值运算符

-

表示这个操作数为负数

-12(它是-12)

加法运算符

添加两个操作数

2 10=12

减法运算符

-

从第一个减去第二个操作数

12-2=10

自增运算符

自增运算符将整数值增加1

int a = 1; a

自减运算符

--

自减运算符将整数值减小1

int a = 1; a--

乘法运算符

*

将两个操作数相乘

2*6=12

除法运算符

/

将两个操作数相除

12/2=6

余值运算符(求余运算符)

%

将操作数相除后取余

12%5=2


(1) -

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

C 代码:

代码语言:javascript复制
int num = -1;
int num2 =  num;

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

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

C 代码:

代码语言:javascript复制
int x = 6   6;
int y = 13 - 1;
(2)*乘法运算符

运算符*用来完成乘法。

C 代码:

代码语言:javascript复制
int num = 2 * 6;
printf("%i", num); // 输出12
// 或者
int num = 6;
printf("%in", num * num);//输出 36
(3)/除法运算符

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

C 代码:

代码语言:javascript复制
float x = 6 / 4;
printf("%fn", x); // 输出 1.000000

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

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

C 代码:

代码语言:javascript复制
float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%fn", x); // 输出 1.500000

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

小测试:

C 代码:

代码语言:javascript复制
int score = 5;
score = (score / 20) * 100;
printf("%i", score);

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

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

C 代码:

代码语言:javascript复制
score = (score / 20.0) * 100;
(4)%求余运算符(取模运算符)

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

C 代码:

代码语言:javascript复制
int x = 12 % 5;
printf("%i", x); // 2

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

C 代码:

代码语言:javascript复制
11 % -5 // 1
-11 % -5 // -1
-11 % 5 // -1

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

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

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

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

下面是一些例子。

C 代码:

代码语言:javascript复制
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的操作

  • :自增运算符
  • --:自减运算符

C 代码:

代码语言:javascript复制
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关系运算符优先级.png

4.逻辑表达式

(1)逻辑运算符

运算符

含义

含义

&&

逻辑与

`

`

逻辑或

!

逻辑非

逻辑运算符优先级.png逻辑运算符优先级.png

(2)逻辑表达式

C语言

计算机逻辑表达式的值

判断量的真假

1

非0

0

0

总结

标记

操作符

类型

优先级

--

自增、自减

后缀

16

--

自增、自减

前缀

15

!

逻辑非

单目

15

-

正号、负号

单目

15

* / %

乘、除、取余

双目

13

-

加、减

双目

12

< > <= >=

关系

双目

10

== !=

逻辑与

双目

9

`

`

逻辑或

双目

5

?:

条件

三目

3

=

赋值

双目

2

0 人点赞