运算符和表达式

运算符和表达式

  C语言中运算符的种类有很多,最常见的就是 + - * / ,除此之外,还有其他运算符可以帮助我们实现更加复杂的程序

  表达式,是由运算符、变量、常量 这三种中的一种或几种组成的

  一个合法的表达式 不一定要有运算符,但是运算符自己无法构成合法的表达式

  作为一个表达式,如何正确地看待?

  <1>看 表达式的 功能

  <2>看 表达式的 值

 

一.[算术运算符] + - * / %

 

  原则:相同类型的数据在一起做运算,结果还是原来的类型。

  %--取余--运算的结果是余数。

  取余运算的左右两边的操作数必须是正数

  不同类型的数据要做混合运算,必须要遵循以下原则

  10%1.2

  <1>整型要向浮点型看齐:int+float=float

    1.2f%2.4

    printf("%c ",10+'a');

  <2>单精度要向双精度看齐:float+double=double

  <3>短字节向长字节看齐:char+int=int

  <4>*有符号向无符号看齐:int+unsigned int=unsigned int 

int v1=10;
unsigned int v2=-1;
//有符号整型变量 v1,0000 0000~0000 1010
//无符号整型变量 v2,1111 1111~1111 1111--- 2^32-1
if(v1>v2)
{
    printf("v1>v2
");
}
else
{
    printf("v1<=v2
");
}
printf("v2==%u
",v2); 

 

二.[赋值运算符] =

 

  赋值表达式:

    变量=表达式

  [功能]赋值表达式的功能:计算右边表达式的值,给左边变量赋值

  [值]    整个赋值表达式的值是左边变量被赋值之后的值。

  [注]    赋值表达式左边必须是变量

  C中求x的y次方,用 pow 函数,这是个系统库函数

  使用这个函数,需要包含头文件 math.h

  <>是用来包含系统头文件,“”是用来包含用户自己创建的头文件

 

三.[复合赋值运算符] +=  -=  *=  /=  %=

 

  赋值表达式:

    变量 += 表达式

  相当于:变量 = 变量 + 表达式

    例子:a += 10 相当于 a = a + 10

  [功能]在变量a原值的基础上累加一个值

  [值]    整个表达式的值是左边变量被赋值以后的值

  [注]    赋值号左边必须是变量

 

四.[逗号运算符] ,

 

  逗号表达式:

    表达式1,表达式2,表达式3......

    例子:a,10

  [功能]从左到右,依次计算每一个表达式的值

  [值] 逗号表达式 整体的值是 最右边表达式的值

 

五.[关系运算符]  <  <=  >  >=  ==  !=

 

  关系表达式:

    表达式1 < 表达式2

  [功能]计算运算符左右两边的表达式的值,比较大小

  [值]    关系表达式 所表示的关系成立,整个表达式的值称为逻辑“真”,对应数字1

    关系表达式  所表示的关系不成立,整个表达式的值称为逻辑“假”,对应数字0

  关系运算符构成的表达式 往往和if语句(流程控制语句)结合起来使用

 

六.[自增/自减运算符]  ++  - -  

 

  自增表达式:变量++    ++变量

  自减表达式:变量- -     - -变量

  [功能]不论是自增表达式还是自减表达式,都是对变量本身进行加减操作

  变量++,++变量,都是让变量自身的值加1

  变量- - , - -变量,都是让变量自身的值减1

  [值] 作为自增、自减,表达式是有值的

  变量++,[先取值,再++],先取的值 作为 整个表达式的值

  ++变量,[先++,再取值],后取的值 作为 整个表达式的值

 

七.[强制类型转换 - 运算符]

 

  (type)表达式

  [注]强制类型转换运算符 改变的只是表达式的值的类型

 

八.[三目运算符]  ?:

 

  单目运算符:只需要结合一个操作就可以构成合法表达式  ++  - -  &

  双目运算符:需要结合两个操作数才可以构成合法的表达式  +  -  *  /  %  +=

  三目运算符表达式: 

    表达式1?表达式2:表达式3

  [功能]先计算表达式1的值,根据表达式1的值的“真”、“假”(“真”为1,“假”为0),决定计算表达式2还是表达式3

  如果表达式1为“真”,计算表达式2的值,表达式3被忽略

  如果表达式1为“假”,计算表达式3的值,表达式2被忽略

  [值] 如果表达式1的值为“真”,执行表达式2,表达式2的值作为整个表达式的值

  如果表达式1的值为“假”,执行表达式3,表达式3的值作为整个表达式的值

 

九.[逻辑运算符] &&  ||  !

 

[与表达式]

    表达式1&&表达式2

  [功能] 根据&&左右两边表达式的值判断总表达式的值是否为“真”

  [值]

     表达式1 表达式2 总表达式

    真

    假

    真

    假

  [注] 左右两个表达式的值,有一个为“假”,结果就为“假”

  [注] 实际在程序中,当左边的表达式1为“假”时,总表达式立即为“假”,表达式2被忽略(短路)

[或运算符]  ||  读作“或者”

  或表达式:

    表达式1||表达式2

  [功能]  从左到右依次计算每个表达式的值,根据两个表达式的值,决定总表达式的值的“真假”

  [值]

    表达式1 表达式2 总表达式

    真

    假

    真

    假

  [注]  左右两个表达式有一个为“真”,结果就为“真”

  [注]  在实际的开发中,当左边表达式1为“真”时,总表达式就为“真”,表达式2被忽略(短路)

[非运算符]  !

  非表达式:

    !表达式

  [功能]  计算表达式的值,然后取反(“假”变“真”,“真”变“假”)

  [值]    

    表达式 总表达式

    真     假

    假     真

 

[总结] 在一个表达式中,如果有多个运算符,优先级高的运算符优先和操作数结合

  分析任何一个表达式,首先要分清运算符的优先级,然后优先级高的优先结合,最后再去运算

原文地址:https://www.cnblogs.com/firstsky/p/5374718.html