【C语言篇】☞ 4. 运算符

算术运算符:

  1. +  加法运算符
  2. –   减法运算符,或负值运算符
  3. *  乘法运算符
  4. /   除法运算符
  5. % 模运算符,或称取余运算符,须要%两侧均为整型数据

% 取模(取余)运算符的注意事项:

1)取模运算符的操作数只好是整数  

2)取模运算符的正负性取决于前边那么些操作数正负

3)倘使取模运算的左边小于左侧, 那么结果就是左边

取余(模运算):5%3=2; -5%3=-2; 5%-3=2; -5%-3=-2 (余数的符号与被除数一致!)

2%9=2;

图片 1

算术运算的注意点:

  1. 电动类型转换

    int a = 10.6;

    int b = 10.5 + 1.7;

    int b = 10.5 + 10; //将右侧的10调升为了double类型

    自动将大类型转换为了小项目,会丢掉精度

  1. 活动类型提高

  (相同数据类型的值才能进行演算(比如加法运算),而且运算结果依然是千篇一律种数据类型。系统会活动对占有内存较少的品类做三个“自动类型进步”的操作)

    float a = 10 + 3.45f;//int 提升为 float    

    int b = ‘A’ + 32; // char 提升为 int

    double c = 10.3f + 5.7; // float 提升为 double

  1. 解决除法的精度难题

    double b = 1.0 / 2;

  1. 强制类型转换

  (将大范围的多少赋值给小范围变量时,系统会活动做一个胁制类型转换的操作,那样不难丢失精度)

    double a = (double)1 / 2;

    double b = (double)(1 / 2);

    int i = 10.7;  //系统转

    int i = (int) 10.7;  //本人强转

    int a = 198l; // long 转换为 int    

    char b = 65; // int 转换为 char

    int c = 19.5f; // float 转换为 int

 

赋值运算符的三结合方向是:从右到左,而且事先级比算术运算符低

赋值运算符是全体运算符中除了逗号运算符以外优先级最低的

 

 

自增自减写在头里和后边的差别:

  • 假设++写在变量的前边,
    那么会先将变量自增再用自增之后的结果参预运算
  • 一旦++写在变量的末端,
    那么会先将变量的值参加运算再将变量自增
  • 统计一句话:
    ++在前, 先自增再运算, ++在后, 先运算再自增

++a和a++的区别:

  1. 先操作,再使用

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

  1. 先使用,后操作。

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

  运算规则:先左++,再赋值,最终右++。

 

sizeof()运算符:

sizeof可以用来测算二个变量可能三个常量、一种数据类型所占的内存字节数。

在意:sizeof是3个运算符, 不是三个函数

          利用sizeof总计的格式: sizeof(变量/常量/数据类型);

 

sizeof一共有3种形式:

  1. sizeof(变量\常量)
  2. sizeof  变量\常量
  3. sizeof(数据类型)

 

举例:

#include <stdio.h>

int main() {

    char c=’a’;

    printf(“%lu, %lu\n”, sizeof(10), sizeof(c));//4,
1

    printf(“%lu, %lu\n”, sizeof 10, sizeof c);//4,
1

    printf(“%lu\n”, sizeof(int));//4

    return 0;

}

 

逗号运算符和逗号表明式

  1. 逗号运算符主要用来连接表明式

    例如:a=a+1,b=3*4

  1. 用逗号运算符连接起来的表达式称为逗号表达式

        它的形似格局为:表达式1,表达式2,… …,表明式n

    逗号表明式的演算进程是:先算表明式1,再算表明式2,依次算到表达式n

    整个逗号表明式的值是终极多个表明式的值

//逗号运算符

#include <stdio.h>

//逗号运算符类似于加减乘除运算符,逗号运算符取最后2个表达式的值。

int main(){

    int num,num1;

    num=4,7; //逗号运算符的事先级低于赋值运算符

    num1=(4,7); //升高逗号运算符的优先级,先逗号运算,再赋值运算

    printf(“num=%d num1=%d\n”,num,num1);
// num=4 num1=7

    return 0;

}

 

事关运算符

<    小于运算符

<=  小于等于运算符

>    大于运算符

>=  大于等于运算符

==   等于运算符

!=   不等于运算符

  关系运算符的重临值唯有三种, 要么真, 要么假. 1(真)和0(假)

 

动用注意(优先级):

  1. (算术运算符)的先行级大于(关系运算符)

如:3+4>8-2;//结果为1; 等价于:(3+4)>(8-2);

  1. 波及运算符的结缘方向为“从左往右”

如:4>3>2;//结果为0

  1. (<,>,<=,>=)的事先级大于(==,!=)

如:2==3>1;//结果为0; 等价于:2==(3>1);

int a=3>4+7;//结果为0

int b=(3>4)+7;//结果为7

int c=5!=4+2*7>3==10;//结果为0

逻辑运算符

  && 逻辑与 、|| 逻辑或 、! 逻辑非

  接纳注意:

  • 若想判断a的值是不是在(3, 5)范围内,千万不可以写成3<a<5,因为涉嫌运算符的构成方向为“从左往右”。比如a为2,它会先算3<a,也等于3<2,条件不树立,结果为0。再与5相比,即0<5,条件建立,结果为1。由此 3<a<5的结果为1,条件建立,相当于说当a的值为2时,a的值是在(3, 5)范围内的。那眼看是颠三倒四的。正确的论断格局是:(a>3) && (a<5)
  • 能够频繁连接使用逻辑非运算符:!(4>2)结果为0,是”假”,!!(4>2)结果为1,是”真”,!!!(4>2)结果为0,是“假”
  • C语言规定:任何非0值都为“真”,唯有0才为“假”。因而逻辑与也适用于数值。  
  • 比如:
    • 5 && 4的结果是1,为“真”;-6
      && 0的结果是0,为“假”。
    • 5 || 4的结果是1,为“真”;-6
      || 0的结果是1,为“真”;0 || 0的结果是0,为“假”。
    • !5、!6.7、!-9的结果都为0,!0的结果为1。

  && 和 ||
都享有短路特征:

  若是前1个表达式能说了算最后结出则不会一个钱打二十七个结后二个表达式!

#include <stdio.h>

int main() {

    //逻辑运算符&&和||的短路特征

    int a=3,b=4,c=5,r;

    r=(a>b)&&(++b>c);

    printf("%d,%d,%d,%d\n", a, b, c, r);//3, 4, 5, 0

    r=(a<b++)||(b<c++);

    printf("%d,%d,%d,%d\n", a, b, c, r);//3, 5, 5, 1

    

    //非短路的逻辑运算符&和|

    a=3;b=4;c=5;

    r=(a>b)&(b>++c);

    printf("%d,%d,%d,%d\n", a, b, c, r);//3, 4, 6, 0

    r=(a<b)|(b<c++);

    printf("%d,%d,%d,%d\n", a, b, c, r);//3, 4, 7, 1

    return 0;

}

优先级: 

  逻辑运算符的事先级依次为:
小括号()
> 负号 – > ! > 算术运算符 >
关系运算符 > && >
||

 条件运算符(三目运算符 ” ? :
“):表达式1?表明式2:表明式3

要是表明式1为真,三目运算符的运算结果为发挥式2的值,否则为发挥式3的值

单目运算符:操作数只有一个(-1;)

眼睛运算符:操作数有三个(1 – 2;)

三目运算符:操作数有多个(5 > 4 ? 1 : 0)

 

当我们不明确有个别运算符的优先级的时候,可以应用() 来举世闻明优先级

图片 2