——运算符具有右结合性

算数运算符

  1. + - * / %
  2. 1. 小数值 / 大数值,商为0,余数是小数本身;
  3. 2. 截取数值中的最后一位(个位)的数值,使用val%10
  4. 3. 移除数值中的最后一位(个位),使用val/10
  5. 4. 同样的运算逻辑,可扩展到十位、百位以及其他位。

关系运算符

  1. > >= < <= != ==

逻辑运算符

  1. ! && || & | ^

赋值运算符

  1. = += *= /= -=

运算符优先级

算数>关系>逻辑>赋值。

位运算符

位运算符的实际意义

通过位运算符可以对数据的操作精确到每一位

“&”位运算符(按位与)

算术

位的值相同为1,相异为0。

“|”位运算符(按位或)

算术

位或的值中有1,则值为1;位或的值中没1,则值为0。

“~”位运算符(按位取反)

~位运算过程

将值转二进制并按位取反==>判断正负整数符号==>按正或负的算法进行二进制转换十进制

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int i = 5;
  5. int k = 0;
  6. k = ~i; //正整数取反后成了负数,需要按位取反后末位加1完成转换
  7. printf("test你好!!!!\n");
  8. printf("%d\n", k); //k值为-6
  9. return 0;
  10. }

“^”位运算符(按位异或)

算术

位的值相同为0,相异为1。

“<<”位运算符(按位左移)

算术

将值的所有二进制位向左移动n位,右边补0。

  • 左移n位,相当于**值x2****n**次方(值不能溢出)

    “>>”位运算符(按位右移)

    算术

    将值的所有二进制位向右移动n位,左边补0。

  • 右移n位,相当于**值/2****n**次方(值不能溢出)

    其他运算符

    自增/自减

    分类

    1. 前自增/自减 --> ++i或--i
    2. 后自增/自减 --> i++或i--;

    异同

    1. 相同点:
    2. 最终都是使得i的值加1
    3. 不同点:
    4. 前自增(自减)整体表达式的值是i+1i-1)后的值,如下所示:
    5. int i = 0;
    6. int a;
    7. a = ++i; //程序执行i的自增后,再赋值给a
    8. 后自增(自减)整体表达式的值是i+1i-1)后的值,如下所示:
    9. int i = 0;
    10. int a;
    11. a = i++; //程序将i赋值给a后,再执行i的自增

    自增/自减存在的意义

    ```c

  1. 可以使代码更加精练;
  2. i++等价于i+=1;或i=i+1,自增/自减是运行在CPU的寄存器的,拥有更快的处理速度 ```

    使用自增/自减的注意事项

    ```c
  3. 代码编程时,应该尽量屏蔽掉前自增和后自增的差别;
  4. 自增表达式尽量单独成一个语句,不要把它作为一个完整语句的一部分来使用,如: int m = i++ + ++i; 或 printf(“%d %d %d”,i++,++i,i);
    1. <a name="DFDbs"></a>
    2. ## 三目运算符
    3. ```c
    4. 语法规则:
    5. 判断表达式A ? B : C;
    6. 等价于
    7. if(A)
    8. B;
    9. else
    10. C;

    逗号表达式

    1. 语法规则;
    2. (a,b,c,d);
    3. 表示程序从左到右执行,最终表达式的值是最后一项的值,即:
    4. int i = 0;
    5. i = (1,2,3,4); //该语句执行完后,i = 4