四、运算符(基本概念)

来源:互联网 发布:mac怎么装windows 编辑:程序博客网 时间:2024/04/30 04:12

1.单目,双目,三目

单目:i++  --i   ~i  !i

双目:即运算符位于两个表达式之间 a+b

三目:1 ? printf(“true”) : printf(“false”)

2.赋值运算符(不是简单的等式) <注意区分赋值和初始化的异同>

int i=0;//这是初始化(伴随定义过程中给值或者说变量刚分配好空间即给值)

i=3; //这就是赋值:将变量的旧有的值(不是垃圾值)清除,<先了解>动态空间的指针变量还可能把旧的空间回收(C++里的对象的赋值),再分配一个新的空间,再在这个新空间里给上新值.

赋值语句:把某个常量或变量或表达式(包含有返回值的函数)的值赋值给另一个变量。它表示“等于”,而不是“是否相等”。 它的符号是”=”, 而不是“==”

不同于数学上的:x^2+y^2=z^3   x+3=5

已赋值的变量我们称为左值,一般它出现在赋值语句的左边;产生值表达式我们称为右值,一般它出现在赋值语句的右边。常数只能作为右值

赋值语句的左值是不允许表达式存在的 

3.算术运算符

+单目正

-单目负  取反,有点类似!,-用在数学运算上

+ -  *  /(除数不能为0)  %(取余,除数不能为0) 

4.逻辑运算符:真、假

&&  逻辑与  都成立为真

| |  逻辑或  只要有真就是真

!    逻辑非 将对象假的变真,真的变假(不会改变实际涉及变量的值,跟~类似,不像自增自减) 

C语言没有BOOL类型,只有非0为真(别忘记负数),0为假

短路现象

5.关系运算符:(关注:大 小  结果:真 假<整型>)

> <   >=   <=  !=  ==

在条件判断语句里,尽可能将类似if(a==32); 这样的语句反过来写,写成if(32==a);以杜绝可能存的隐患

6.自增自减运算符

++a; --a; 变量自身先加减1,后参与其它运算

a--; a++; 变量自身先参与其它运算,整个表达式结束后再自身加减1

在复杂表达式里,对它的理解(a+++b---c)

注意不要进行++a++;运算

7.复合赋值运算符

+=加法赋值 -= *=

/= %=  <<=  >>=

&=  |=  ^=

普例:a+=2;==>  a=a+2; 完全等价?不是

a+=2; +=只是进行一次运算

a=a+2; 先进行a+2,结果存在临时空间(只读)里,后再把临时空间里的值取出来赋值给a.

由此推向其它复合赋值运算,都是同理

 

8.条件运算符

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

先进行表达式1的运算或调用,如果逻辑上成立或为真,则执行表达式2的语句,否则执行表达式3

9.逗号运算符

< <表达式1>,<表达式2>, <表达式3>, <表达式4>, <表达式5>… >;

Z=(a=0,--b,++c,d=3,printf(„Hi“),while(a!=1)i++,e=5,f,++++--g);

int a,b,c=9,d,e,f;  //不是所有用到逗号的语句都是逗号表达式

      多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个大的表达式的值是最后一个表达式的值。

      逗号表达式运算优先级最低

10. 位运算符 (信号灯游戏)

&位逻辑与 两个为1才是1

|位逻辑或  只要有一个为1就为1 (包含了两个都为1也为1的情况)

^位逻辑异或  只要不同就为1(如果都相同,不管是不是1,都为0)<位逻辑异>

~取补(位取反)

<<  >> 左移 右移 跟乘除的关系

11.运算符的优先级和结合性

    结合性:又称为计算顺序,它决定组成表达式的各个部分是否参与计算以及什么时候计算(大家优先级一样时:自左向右,自右向左)

    优先级                      运算符                          结合性

     最高         函数() //Func(int a) 数组[] -> .      自右向左

       1            ! ~ ++ -- + - * & sizeof  (单目)    自右向左

       2                     * /  % (双目)                       自左向右

       3                     + -                                    自左向右

       4                     << >>                              自左向右

       5                     == != >= <=                    自左向右

       6                     & ^ | (双目)                       自左向右

       7                     &&  | |                              自左向右

       8                    ?:                                     整体自右向左(内部自左向右)

       9       = +=  *=  %=   &= <<= >>=        自右向左

    最低                  ,逗号                                自左向右


助记:目数越多,优先级越低

特殊的:a+b*( c+d )  圆括号表示把所括内容当成一个表达式处理
原创粉丝点击