黑马程序员——运算符

运算符

运算符是告诉编译程序执行特定算术或逻辑操作的符号。

运算符的优先级表:

注:同一优先级的运算符,运算次序由结合方向所决定。

一、算术运算符

算术运算符就是我们所学的加减乘除。如下表:

算术运算表达式的结果依据赋值对象的类型而变。

二、赋值运算符

赋值运算符分两种:简单赋值运算符 和 复合赋值运算符。

1.简单赋值运算符

  简单赋值运算符记为“=”,由“= ”连接的式子称为赋值表达式。其一般形式为:
    变量=表达式

int a=3
int a=3,b=9int x;
x=(a=5)+(b=8);

2.复合赋值运算符 

在赋值符“=”之前加上其它二目运算符可构成复合赋值符,先运算后赋值。

构成复合赋值表达式的一般形式为:

      变量  双目运算符=表达式
   它等效于
      变量=变量 运算符 表达式

  • +=  加赋值运算符。如a += 3+2,等价于 a = a +(3+2)
  • -=  减赋值运算符。如a -= 3+2,等价于 a = a -(3+2)
  • *=  乘赋值运算符。如a *= 3+2,等价于 a = a *(3+2)
  • /=  除赋值运算符。如a /= 3+2,等价于 a = a /(3+2)
  • %=  取余赋值运算符。如a %= 3+2,等价于 a = a %(3+2)

三、自增、自减运算符

自增1运算符记为“++”,其功能是使变量的值自增1;自减1运算符记为“--”,其功能是使变量值自减1,计算遵循右结合。

自增和自减运算情况一样,在这里以自增为例:

 1.++a     求值:先让a的值加1,再取a变化后的值作为表达式的值。

                 口诀:先变后用。

                 如:int a=3;

                     int c=++a;

                 输出结果为:a的值为4,c的值为4。

 2.a++    求值:先把a的值赋值给表达式,在把a的值加1。

                口诀:先用后变。

                如:int a=3;

                    int c=a++;

                 输出结果为:a的值为4,c的值为3。

    注意:1)++a,a++最终a的值都会加1。

          2)只能用于变量,如4++,这样是错误的。

四、sizeof

sizeof(单目运算符):以字节形式给出其操作数的存储大小。操作数可以是表达式、常量、变量及括在括号内的类型名。

格式:sizeof(操作数)  

注意:sizeof用在常量和变量的时候,是可以省略括号的,用在计算数据类型时不可省略的。      

五、逗号运算符

在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。计算遵循左结合,其一般形式为:
    表达式1, 表达式2,...,表达式n 

求值:分别求多个表达式的值,并以末尾的表达式的值作为整个逗号表达式的值。

#include <stdio.h>
int main(void){
    int a=2,b=4,c=6,x,y;
    y=(x=a+b,b+c);
    printf("y=%d, x=%d \n",y,x);
    return 0;
}

运行结果:
y=10, x=6        

注意:

    1.逗号运算符可以嵌套使用。(++a,(c=b=c,a+b,b+3))。

    2.在定义变量时,所出现的“,”并不是逗号表达式。

六、三目运算符

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

运算过程:当表达式1为真时,表达式2的值作为整体的值,否则,表达式3为整体的值。

七、关系运算符

在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。计算遵循左结合。

在C语言中有以下关系运算符:

  1. <(小于)
  2. <=(小于或等于)
  3. >(大于)
  4. >=(大于或等于)
  5. ==(等于)
  6. !=(不等于)

关系表达式的格式:

表达式  关系运算符  表达式

关系表达式的值是“真”和“假”,用“1”和“0”表示。

八、逻辑运算符

C语言中提供了三种逻辑运算符:

  1. &&(与运算) 一假俱假 同真为真 左结合
  2. ||(或运算) 一真俱真 同假为假 左结合
  3. !(非运算)  右结合

“&&”和“||”低于关系运算符,“!”高于算术运算符。

格式:表达式  逻辑运算符  表达式

运算结果:真(1)和假(0)。

逻辑运算符的短路问题:

int a=0,b=0,c=-1;

c=a&&n++;//a=0,b=0,c=0

由于&&是左结合,计算机从左开始编译。尽管++比&&优先,但是计算机先读取a=0,&&之后的b++就不执行了。

九、位运算符

位运算就是用于整数的二进制位之间的运算。

C语言提供了六种位运算符:
    &     按位与      

格式:整数a & 整数b    功能:俩个操作数同1则结果为1,有0则为0
    |      按位或       

格式:整数a | 整数b     功能:俩个操作数有1则结果为1,同0则为0
    ^     按位异或    

格式:整数a ^整数b     功能:俩个操作数相同位为0,不同位为1
    ~      取反      

  格式:~整数a             功能:1位变0,0位变1
    <<    左移      

  格式:整数a<<正数n   功能:把整数a的各二进位全部左移n位,高位丢弃,低位补0。
    >>    右移        

 格式:整数a>>正数n   功能:把整数a的各二进位全部右移n位,地位丢弃,高位保持符号位不变的同时补0。

左移可用于计算一个数乘以2的N次方,右移可用于计算一个数除以2的N次方。

位运算符的应用:1.任何数和1进行&操作,将得到这个数的最低位。最低位为0则为偶数,为1则为奇数。

                2.把第i为变为0,用&操作,

                如:0000 0000 0000 0000 0000 0000 0000 0i01

                  & 1111 1111 1111 1111 1111 1111 1111 1011

                3.俩个变量的交换。

                  1)引入第三变量;

                  2)int a=5,b=6;

                          a=a+b;

                          b=a-b;

                          a=a-b;

                  3)int a=4,b=5;

                          a=a^b;

                          b=a^b;

                          a=a^b;

 

posted @ 2015-05-19 16:19  Yj.Adair  阅读(424)  评论(0编辑  收藏  举报