C语言表达式 ——学习笔记

来源:互联网 发布:疯狂的java讲义百度云 编辑:程序博客网 时间:2024/05/16 11:43

表达式

在学习c的过程中,会遇到很多的运算符号,一些常见的运算符:+ ()- ()* ()/ ()% (求余数) ,它们的优先级和数学上的四则运算大同小异。  其优先级为:*/%同级,但比+-高。即先乘除后加减。

%(求余数):通过%来求余数,其所得余数的符号是与%左边的数的符号是一致的。例如:a=5%-4,其结果a=1a=-5%4,其结果a=-1

在运算过程中难免会遇到数据类型的转换:

类型转换:

    显示转换

 int main()

       {

            int a;

            float b = 1.2;

            a = (int) b;//float型的变量bint变量使用,不会改变b的值

            Pringtf(%d,a);

}

将浮点型转换成整型,小数点会被截断。如上面的b,会被当成b=1参与运算。

 

隐式转换:数据在参与运算前要进行以下转换: char, short转换为 intfloat

转换为double.

混合运算时数据类型由低级到高级

float的数据只有7位有效数字,double的数据只有16位有效数字。(也就是说对于数值很大的浮点型数与很小的浮点型数进行加与减运算是无意义的)

复合的运算符

a +=10等价于 a = a+10

复制运算符的结合性为:自右而左

a += a -=a*a;等价于 a=a-a*a ;  a=a+a

 

c语言中关系运算符的结果只有两个。要么表达式成立(值为1),要么表达式不成立(值为0)如:

     main()

     {

          int a=10,b=9,c=6,F;     

           F=a>b>c;    \\

           Printf(F=%d\n,F);

}

 其结果为:F=0  是因为该命令是由左往右进行运算,先运算a<b,其结果为1,然后运算1>c,其结果为0

条件运算符是c语言中唯一的三目运算符

逗号运算符:从左向右计算,取最后的值如:

       x=10;  y1=(x+2,4,5+6),y2=x+2,4,5+6。则y1=11,y2=12.

 

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

++i  ,先运行i = i+1,再把i的值带入运算

i++  ,先把i的值带入运算,运算完成后再进行i = i+1运算

如:

b = a++;   等价于  b=aa=a+1;

b =++a;    等价于  a=a+1;b=a;

其结合性为自右向左

 c语言的贪婪法则:编译器在进行从左往右扫描运算符时会尽可能多的组合运算符

Windows下:

运算有自增或自减运算的表达式时,先将整个表达式里所有要先自增或减的变量进行自增或自减的运算。再把变量进行自增或自减后所得到的值在带入运算中进行下步运算。

Linux下:

运算有先要自增或自减运算的表达式时,是从左往右进行运算,遇到涉及先要自增或自减的变量是时再进行该变量的先自增或自减运算后将变量的值带入运算。