c语言运算符

  • 格式:pdf
  • 大小:129.41 KB
  • 文档页数:6

c语⾔运算符

1.运算符概述

运算符是⼀种编译器执⾏特定的数学或逻辑操作的符号。C语⾔提供了以下类型的运算符:

算术运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

条件运算符

其他运算符2.算术运算符

算术运算符分为单⽬运算符和双⽬运算符,单⽬运算符表⽰只需要⼀个操作数,双⽬运算符需要两个操作数。

# 2.1 双⽬算术运算符

1)+ :加法,把两个操作数相加

2)- :减法,从第⼀个操作数中减去第⼆个操作数

3)* :乘法,把两个操作数相乘

4)/ :除法,第⼀个操作数除以第⼆个操作数

5)% :求模(取余),第⼀个操作数除以第⼆个操作数所得余数

双⽬运算符中,C语⾔中的加号、减号与数学中的⼀样。乘号、除号因为ASCII符号中没有与数学中相对应的符号,所以使⽤星号表⽰乘号,使⽤斜线表⽰除号。C语⾔中增加了⼀个

求模运算符,是⽤来取余的。需要注意的是,求模运算符的两个操作数必须是整型。

【实例6.1】加减乘除以及取模运算

执⾏以上程序,输出结果为:

实例解析:

加、减与数学中的⼀样,其中需要说明的是除法以及取模运算。C语⾔中的除法运算,不同类型的除数和被除数会导致不同类型的运算结果。⼀种情况是,当除数和被除数都是整数时,

运算结果也是整数。当不能整除时,就直接舍弃⼩数部分,只保留整数部分。另⼀种情况是,⼀旦除数和被除数中有⼀个是⼩数,那么运算结果也是⼩数,并且是double类型的⼩数。C

语⾔中的取余运算,就是求相除后的余数。取余运算中%的两边都必须是整数,不能出现⼩数,否则会报错。余数可以是正数也可以是负数,由%左边的整数决定:如果%左边是正数,

那么余数也是正数;如果%左边是负数,那么余数也是负数。#include

int main()

{

int a = 21;

int b = 10;

int c;

float d = 2.5;

double e;

int f = -21;

int g = -10;

c = a + b;

printf(" a + b = %d\n", c);

c = a - b;

printf(" a - b = %d\n", c);

c = a * b;

printf(" a * b = %d\n", c);

c = a / b;

printf(" a / b = %d\n", c);

e = a / d;

printf(" a / d = %lf\n", e);

c = a % b;

printf(" a %% b = %d\n", c);

c = a % g;

printf(" a %% g = %d\n", c);

c = f % b;

printf(" f %% b = %d\n", c);

c = f % g;

printf(" f %% g = %d\n", c);

return 0;

}

a + b = 31

a - b = 11

a * b = 210

a / b = 2

a / d = 8.400000

a % b = 1

a % g = 1

f % b = -1

f % g = -1# 2.2 单⽬算术运算符

1)- :取负,把操作数乘以-1

2)++:⾃增运算符,把操作数增加1

3)--:⾃减运算符,把操作数减少1

单⽬运算符中,只需要⼀个操作数。取负操作符将正操作数设置为负数,负操作数设置为正数。⾃增运算符使得变量的值增加1,⾃减运算符使得变量的值减少1。⽐如:

变量i的值增加1,变量j的值减少1,相当于:

⾃增运算符和⾃减运算符的运算对象只能是变量,不能是常量或者表达式,否则将会报错。⽐如:

⾃增运算符和⾃减运算符分为两种⽅式:⼀种是在变量前⾯,称为前缀模式;⼀种是在变量后⾯,称为后缀模式。下⾯介绍⼀下两种⽅式的区别:

前缀模式,先执⾏变量的⾃增或者⾃减操作,再将得到的结果参与表达式运算。

后缀模式,先将变量参与表达式运算,再执⾏变量的⾃增或者⾃减操作。

前缀模式,也被理解为先运算后赋值,⽐如:

执⾏上⾯语句,i和j的值都是2。先是变量i⾃增,i的值变为2,再将结果2赋值给j。

后缀模式,也被理解为先赋值后运算,⽐如:

执⾏上⾯语句,i的值是2,j的值是1。先是变量i赋值给j,这个时候i还没有⾃增操作,i的值还是1,所以j的值是1。赋值后,i再⾃增,i的值变为2。

【实例6.2】前缀模式和后缀模式

执⾏以上程序,输出结果为:i++;

j--;

i = i+1;

j = j-1;

1++;//报错

--(i+1);//报错

i = 1;

j = ++i;

i = 1;

j = i++;

#include

int main()

{

int a = 10;

int c;

c = a++;

printf("先赋值后运算:\n");

printf(" c 的值是 %d\n", c);

printf(" a 的值是 %d\n", a);

a = 10;//重新赋值为10

c = a--;

printf(" c 的值是 %d\n", c);

printf(" a 的值是 %d\n", a);

printf("先运算后赋值:\n");

a = 10;

c = ++a;

printf(" c 的值是 %d\n", c);

printf(" a 的值是 %d\n", a);

a = 10;

c = --a;

printf(" c 的值是 %d\n", c);

printf(" a 的值是 %d\n", a);

}

先赋值后运算:

c 的值是 10实例解析:++ 在变量前⾯和后⾯是有区别的:++ 在前⾯叫做前⾃增。前⾃增先进⾏⾃增运算,再进⾏其他操作。++ 在后⾯叫做后⾃增。后⾃增先进⾏其他操作,再进⾏⾃增运算。

对于,c = a++; a 的值不会⽴马加 1,⽽是先把 a 原来的值(也就是10)交给 c,然后再加 1。a 原来的值为 10,所以 c 的值也就为 10。⽽ a 经过⾃增,最终值为 11。

对于,c = a--; a 的值不会⽴马减 1,⽽是先把 a 原来的值(也就是10)交给 c,然后再减 1。a 原来的值为 10,所以 c 的值也就为 10。⽽ a 经过⾃减,最终值为 9。

对于,c = ++a,先执⾏ ++a,结果为 11,再将 11 赋值给 c,所以 c 的最终值为11。⽽ a 经过⾃增,最终的值也为 11。

对于,c = --a,先执⾏ --a,结果为 9,再将 9 赋值给 c,所以 c 的最终值为9。⽽ a 经过⾃减,最终的值也为 9。

# 2.3 算术运算符的优先级

在数学运算中,运算符是有优先级的,C语⾔中的运算符也有优先级。算术运算符的优先级:单⽬算术运算符(-、++、--) > 乘号(*)、除号(/)、求模(%) > 加号(+)、减号(-)。⽐如:

根据优先级,将会先计算2 * 3,再将得到的结果6和1相加,得到7,赋值给变量a。

当表达式中有多个相同优先级的运算符时,按照从左到右的顺序运算。⽐如:

乘号(*)、除号(/)优先级相同,按照从左到右的顺序运算,先计算2 * 3,将结果6 / 3,得到结果2和1相加,得到3,赋值给变量a。

如果需要改变表达式的运算顺序,我们还可以使⽤圆括号。⽐如:

先计算圆括号内的1 + 2,得到的结果3再去运算,最后得到3,赋值给变量a。

3.关系运算符

1)==:检查两个操作数的值是否相等,如果相等则条件为真。

2)!=:检查两个操作数的值是否相等,如果不相等则条件为真。

3)> :检查左操作数的值是否⼤于右操作数的值,如果是则条件为真。

4)< :检查左操作数的值是否⼩于右操作数的值,如果是则条件为真。

5)>=:检查左操作数的值是否⼤于或等于右操作数的值,如果是则条件为真。

6)<=:检查左操作数的值是否⼩于或等于右操作数的值,如果是则条件为真。

关系运算符只有两种结果:true或者false。true代表条件为真,false代表条件为假。C语⾔中,⼀般⾮0值代表true,0代表false。⽐如:

1 == 2;//条件为假,结果是false。

1 != 2;//条件为真,结果是true。

1 > 2;//条件为假,结果是false。

1 < 2;//条件为真,结果是true。

1 >= 2;//条件为假,结果是false。

1 <= 2;//条件为真,结果是true。

4.逻辑运算符

1)! :单⽬运算符,称为逻辑⾮运算符。⽤来逆转操作数的逻辑状态。如果条件为真则逻辑⾮运算符将使其为假。

2)&&:双⽬运算符,称为逻辑与运算符。如果两个操作数都⾮零,则条件为真。

3)||:双⽬运算符,称为逻辑或运算符。如果两个操作数中有任意⼀个⾮零,则条件为真。

逻辑运算符与数学上有相同之处。逻辑运算符和关系运算符⼀样,也只有两种结果:true或者false。逻辑运算符可以将多个关系表达式的结果合并起来。我们要判断变量i是否在0和100之间,不能直接表⽰成:0 =< i =< 100。需要使⽤逻辑运算符来表⽰,⽐如:

如果变量i在0和100之间,则结果为true,否则为false。

逻辑运算符也是有优先级的,逻辑⾮运算符(!)>逻辑与运算符(&&)>逻辑或运算符(||)。

【实例6.3】逻辑运算符a 的值是 11

c 的值是 10

a 的值是 9

先运算后赋值:

c 的值是 11

a 的值是 11

c 的值是 9

a 的值是 9

int a = 1 + 2 * 3;

int a = 1 + 2 * 3 / 3;

int a = (1 + 2) * 3 / 3;

i >= 0 && i =< 100

#include

int main()

{

int a = 0, b = 1, c = 2, d = 3;

printf("!a = %d\n", !a);

printf("!b = %d\n", !b);

printf("a&&b = %d\n", a && b);

printf("a||b = %d\n", a || b);

printf("a&&b||c&&d = %d\n", a&&b || c&&d);

printf("a&&!b||c&&d = %d\n", a && !b || c&&d);