第二章C语言运算符得使用和优先级

你好!我是小柒,今天我们大家一起学习C语言运算符的使用和优先级

本节内容:

1、算术运算符

2、赋值运算符、关系运算符、条件运算符、复合运算符

3、逻辑运算符

小柒提示:进入正文啦!

一、算术运算符

     +-*/%++- -

     int a = 10,b = 10;

     printf("%d"a+b);

     printf("%d"a-b);

     printf("%d"a*b);

     printf("%d"a/b);

     printf("%d"a%b);

小柒提示:

  1.     除号右边的数字不能为0
  2.     取余运算符两边必须都是整数

-----------------------------------------------------------------

int a = 20,b = 10;

int c;

    c = b%a;

//++在前

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

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

打印结果:c++ = 10

打印结果:c = 11

//++在后

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

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

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

打印结果:c = 10

打印结果:c++ = 10

打印结果:c = 11

小柒提示:++,--在前和在后最终结果都一样。但是过程不一样。

  1.     ++- -在前,先执行++- -
  2.     ++- -在后,后执行++- -

二、赋值运算符、关系运算符、条件运算符、复合运算

1)赋值运算符

小柒什么是赋值运算符?

答:用于给变量赋值, 将等号右边的值赋给等号左边的变量

  1. int a ,b = 10;
  2. printf("a = %d\n",a);//打印a
  3. a = b;//把b的值传给了a
  4. printf("a = %d\n",a);//打印a和b
  5. 打印结果:
  6. a =0
  7. a = 10

小柒提示,赋值运算符的优先级略低

2)关系运算符

小柒什么是关系运算符?
答: 关系运算符的值只能是0或1。(关系运算符的值为真时,结果值都为1,关系运算符的值为假时,结果值都为0)
  • >    >=    <    <= 
  •   ==    !=

关系运算符的值为假时,结果值都为0 

int a = 10,b = 20;

    printf("%d",a > b);

    打印:0

 int a = 10,b = 20;

    printf("%d",b == a);

    打印:0

-----------------------------------------------------------------

关系运算符的值为真时,结果值都为1 

     int a = 10,b = 20;

    printf("%d",b > a);

    打印:1

    int a = 10,b = 20;

    printf("%d",b != a);

   打印:1

小柒提示: =和==是不同,(一个=是赋值方法)(两个==是相等)

优先级,关系运算符对内,前4种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。

对外,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符

-----------------------------------------------------------------

C语言提供6种关系运算符,如表所示:

运算符
名称
示例
功能
缩写
<
小于
a<b
a小于b时返回真;否则返回假
LT
<=
a<=b
a小于等于b时返回真;否则返回假
LE
>
大于
a>b
a大于b时返回真;否则返回假
GT
>=
a>=b
a大于等于b时返回真;否则返回假
GE
==
等于
a==b
a等于b时返回真;否则返回假
EQ
!=
不等于
a!=b
a不等于b时返回真;否则返回假
NE

 

3)复合运算符

  • 复合运算符:+=、-=、*=、/=、%=
  • 例如:
  • a += b;    //等价于a = a + b;
  • a %= b;    //等价于a = a % b;

小柒提示,一定要记住哦!

4)条件运算符    ? :

用法:条件表达式1 ?真结果表达式2:假结果表达式3;

  • 条件运算符  ? :

举例:int a = 3,b = 5;

     a > b ? a : b;

先求解表达式1,
若其值为真(非0)则将表达式2的值作为整个表达式的取值,
否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。

-----------------------------------------------------------------

例如:
1、max=(a>b)?a:b
就是将a和b二者中较大的一个赋给max。
 打印:max = 5
2、min=(a<b)?a:b
就是将a和b二者中较小的一个赋给min。
打印:min = 3
优先级,条件运算符优先级高于赋值逗号运算符,低于其他运算符
小柒提示:
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
例如:
w<x ? x+w : x<y ? x : y
与 w<x ? x+w : ( x<y ? x : y) 等价
与 (w<x ? x+w : x<y) ? x : y 不等价

二、逻辑运算符

  • &&(逻辑与):运算符两边同时为真的时候,整个逻辑表达式的结果为真3<5&&5>3真,3<5&&5<3假。
  • |   |(逻辑或):运算符两边同时为假的时候,整个逻辑表达式的结果为假5<3||3<5真,5<3||5<3假
  • !(逻辑非):将表达式的结果取反;
  • 例如:” !0" 这个逻辑表达式的值为1.(判断的这个数为0,成立,则其表达式的值为1);
  • " !1" 这个逻辑表达式的值为0.(判断的这个数非0,不成立,则其表达式的值为0)

优先级,非!与&&或\\

小柒提示,注意逻辑与和逻辑或的短路现象。

-----------------------------------------------------------------

例一

int a = 3,b = 5;

    a||b++;

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

    printf("b = %d",b);

打印:a = 3

        b = 5

-----------------------------------------------------------------

与或的短路现象

这部分很多学员都会掉坑里

b = ? 

b = 5;因为a为真,整个或表达式已经为真了,所以系统并不会去处理b++

int a = 3,b = 5;

    b++;

printf("b = %d",b);

打印:b = 6

因为a为真,整个或表达式已经为真了,所以系统并不会去处理b++

int a = 0, b = 1;

a&&++b;

 

b = ?                                            

b = 1;a已经为假,整个与表达式已经为假,所以系统并不会去处理++b

  • && || 操作时候才出现的
  • 条件1&&条件2 
  • 前面条件为假时候,条件2的语句不执行,该逻辑为假
  • 条件1||条件2 
  • 前面条件为真时候,条件2的语句不执行,该逻辑为真

 

C语言优先级表:

优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[ ]
数组下标
数组名[整型表达式]
左到右
 
( )
圆括号
(表达式)/函数名(形参表)
 
.
成员选择(对象)
对象.成员名
 
->
成员选择(指针)
对象指针->成员名
 
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
 
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针表达式
单目运算符
&
取地址运算符
&左值表达式
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof 表达式/sizeof(类型)
 
3
/
表达式/表达式
左到右
双目运算符
*
表达式*表达式
双目运算符
%
余数(取模)
整型表达式%整型表达式
双目运算符
4
+
表达式+表达式
左到右
双目运算符
-
表达式-表达式
双目运算符
5
<<
左移
表达式<<表达式
左到右
双目运算符
>>
右移
表达式>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
整型表达式&整型表达式
左到右
双目运算符
9
^
按位异或
整型表达式^整型表达式
左到右
双目运算符
10
|
按位或
整型表达式|整型表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
 
/=
除后赋值
变量/=表达式
 
*=
乘后赋值
变量*=表达式
 
%=
取模后赋值
变量%=表达式
 
+=
加后赋值
变量+=表达式
 
-=
减后赋值
变量-=表达式
 
<<=
左移后赋值
变量<<=表达式
 
>>=
右移后赋值
变量>>=表达式
 
&=
按位与后赋值
变量&=表达式
 
^=
按位异或后赋值
变量^=表达式
 
|=
按位或后赋值
变量|=表达式
 
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算

 

 

小柒今天累了,明天咱们一起来学习一下,scanf函数和分支结构 ,加油哦!

 

posted on 2015-12-07 22:11  xxQMYxx  阅读(329)  评论(0编辑  收藏  举报

导航