• 操作符详解(C语言)


    目录

    算术操作符(运算符):

    +   -    *    /    %

    1、/ (除法)

    2、% (取模、取余)

    移位操作符:

    << (左移)     >>(右移)

    注意:移位操作符的操作数只能是整数

    1、<< 左移操作符:

    2、>>右移操作符:

    位操作符

    &   |   ^    ~

    注意:它们的操作数必须是整数

    1、&  按位与

    2、|  按位或

    3、^ 按位异或

    不创建第三方变量交换两个值(^ 具有结合律)

    4、~  按位取反

    赋值操作符

    1、=  赋值符号

    2、复合赋值符

    1>  += 、-=、/=、%=

    2>  >>=  、 <<=

    3>  &=、|=、^=

    单目操作符

    !:逻辑反操作符

    -  :负值

    + :正值

    & :取地址

    sizeof 操作符

    ~ :对一个数的二进制位按位取反

    sizeof与数组

    - - 自减

    ++ 自增

    *  解引用操作符

    (类型) 强制类型转换

    关系操作符

    >、>=、<、<=、==、!=

    逻辑操作符

    && 逻辑与

    ||  逻辑或

    ! 逻辑非

    条件操作符

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

    逗号表达式

    表达式1,表达式2,……,表达式n

    下标引用操作符

    [] 下标引用

    函数调用操作符

    ()

    结构体成员访问操作符

    .  操作符

    -> 操作符

    隐式类型转换

    整型提升

    算术转换

    操作符的属性

    1、操作符的优先级

    2、操作符的结合性

    3、操作符是否控制求值顺序

    看图参考:


    算术操作符(运算符):

    +   -    *    /    %

    在算术运算符中,+  -  *  跟我们数学中的运算是一样的

    在这里主要说一下  /  跟  %  这两个操作符

    1、/ (除法)

    在除法运算中,若除号两边的操作数都为整型,则结果是取商的部分

    操作数:指的就是 被除数 与 除数

    eg:a/b a和b均为整数,若a

    (小数除以大数结果为0)

    在两个整数运算中C语言遵从的是(向0取整)法则

    所谓向0取整 就是在 数轴上朝向0的方向取整

    eg :  10/8=1.25 数学运算

            10/8 =1  C语言

            因为1.25>0 在取整的时候不会取到整数2 而是取到1 因为1 比2更接近与0

    在除法运算中,只要有一个操作数是浮点数,就是浮点数的除法运算

    所谓浮点数的除法运算就是,最后的结果是一个浮点数

    1. #include
    2. int main()
    3. {
    4. printf("%d\n",20/10);//结果就是一个是整数
    5. //小数除大数
    6. printf("%d\n",2/19);//结果为0
    7. printf("%lf\n",20.0/10);//结果是一个浮点数
    8. printf("lf\n",20.0/10.0);//结果是一个浮点数
    9. return 0;
    10. }

    2、% (取模、取余)

    在取模运算中 取到的结果是两数相除之后所留的余数

    取余运算两边的操作符只能是整数

    在模运算中,a%b  当a的值小于b时 结果为a

    (小数模大数结果为小数本身)

    1. #include
    2. int main()
    3. {
    4. //两数进行模运算
    5. printf("%d\n", 5 % 4); //1
    6. //小数 模 大数 得到的是小数本身
    7. printf("%d\n", 3 % 4); //3
    8. printf("%d\n", 2 % 19); //2
    9. return 0;
    10. }

    移位操作符:

    << (左移)     >>(右移)

    注意:移位操作符的操作数只能是整数

    1、<< 左移操作符:

    移动的时二进制位,因为在内存中数据是以补码的形式存在的,同理 移动的是二进制的补码

    左移操作符如何移动:左边丢弃,右边补0

    移位操作符不能移动负数位

    1. #include
    2. int main()
    3. {
    4. //左移操作符 <<
    5. int a = 10;
    6. //a 的原码:00000000 00000000 00000000 00001010
    7. //正数的原码 反码、补码 相同
    8. int b = a << 1;
    9. //将a左移一位:00000000 00000000 00000000 00010100
    10. // 左移一位之后还是一个正数,原、反、补 相同
    11. // b=20
    12. printf("%d\n", b);
    13. }

    2、>>右移操作符:

    移动的是二进制位 移动的是二进制位的补码

    移位规则:

    1、算术右移:右边丢弃左边补符号位(大部分编译器都用)

    2、逻辑右移:右边丢弃左边补0

    1. #include
    2. int main()
    3. {
    4. //0 表示正数,1表示负数
    5. int a = -10;
    6. //a原码 : 10000000 00000000 00000000 00001010
    7. // 反码: 11111111 11111111 11111111 11110101
    8. // 补码: 11111111 11111111 11111111 11110110
    9. //将补码算术右移一位
    10. int b = a >> 1;
    11. //补码:11111111 11111111 11111111 11111011
    12. // 10000000 00000000 00000000 00000100
    13. //原码:10000000 00000000 00000000 00000101
    14. // b=-(1+4)=-5
    15. printf("%d\n", b);
    16. return 0;
    17. }

    位操作符

    &   |   ^    ~

    注意:它们的操作数必须是整数

    1、&  按位与

    & 按位与:操作的是二进制的补码,二进制位一位一位的运算

    运算规则:两个对应的二进制位只要有0结果为0,只有全为1时结果为1

                    (有0为0,全为1为1)

    1. #include
    2. int main()
    3. {
    4. //&:有0为0 同为1为1
    5. int a = 10;
    6. int b = 20;
    7. int c = a & b;
    8. printf("%d\n", c);
    9. //正数的 原码、反码、补码相同
    10. //a原码:00000000 00000000 00000000 00001010
    11. //b原码:00000000 00000000 00000000 00010100
    12. //a&b: 00000000 00000000 00000000 00000000
    13. //c=0;
    14. return 0;
    15. }

    2、|  按位或

    | 按位或:操作的是二进制的补码,二进制位对齐运算

    运算规则:对应的二进制位 只要有一个 1 结果为 1 ,都为 0 结果为 0 

                    (有1为1 ,同0为0)

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. int b = 20;
    6. int c = a | b;
    7. printf("%d\n", c);
    8. //正数的原码、反码、补码相同
    9. //a的补码: 00000000 00000000 00000000 00001010
    10. //b的补码:00000000 00000000 00000000 00010100
    11. // a | b: 00000000 00000000 00000000 00011110
    12. //c=2+4+8+16=30
    13. return 0;
    14. }

    3、^ 按位异或

    ^ 按位异或:操作的是二进制位的补码,二进制位对齐运算

    运算规则:二进制位相同为 0 ,二进制位不同为 1 

                    (相同为0,相异为1)

    任何数和0异或,结果都是任何数本身

    任何数异或其本身 结果都是0

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. int b = 10;
    6. int c = a ^ b;
    7. printf("%d\n", c);
    8. //正数的原码、反码、补码 相同
    9. //a 补码:00000000 00000000 00000000 00000000
    10. //b 补码:00000000 00000000 00000000 00001010
    11. //c 补码:00000000 00000000 00000000 00001010
    12. //c是正数,原码、反码、补码 相同
    13. //c=10
    14. //总结:任何数 和 0 异或 结果都是其本身
    15. return 0;
    16. }

    不创建第三方变量交换两个值(^ 具有结合律)

    1. #include
    2. int mian()
    3. {
    4. //不使用第三方变量,交换值
    5. int a = 10;
    6. int b = 0;
    7. a = a ^ b;
    8. b = a ^ b;
    9. a = a ^ b;
    10. //用等量代换方法
    11. // a=a^b;
    12. // b=a^b^b; b^b=0 ==> b=a
    13. // a=a^b^a a^a=0 ==> a=b
    14. //按位异或具有结合律
    15. return 0;
    16. }

    4、~  按位取反

    ~ 按位取反:操作的是二进制位的补码

    运算规则:将二进制位的 0变成1 ,1变成0

    1. #include
    2. int main()
    3. {
    4. int a = -1;
    5. int b = ~a;
    6. printf("%d\n", b);
    7. //a:
    8. //原码:10000000 00000000 00000000 00000001
    9. //反码:11111111 11111111 11111111 11111110
    10. //补码:11111111 11111111 11111111 11111111
    11. // ~a: 00000000 00000000 00000000 00000000
    12. //~a 符号位是0 是正数,正数的原 反 补 相同
    13. // ~a 原码 :00000000 00000000 00000000 00000000
    14. // b=0;
    15. return 0;
    16. }

    赋值操作符

    1、=  赋值符号

    就是给一个变量赋值

    2、复合赋值符

    1>  += 、-=、/=、%=

    1. #include
    2. int main()
    3. {
    4. // +=
    5. int a = 100;
    6. a += 11; //a=a+11 a=111
    7. printf("%d\n", a);
    8. // -=
    9. int b = 90;
    10. b -= 20; //b=b-20 //b=70
    11. printf("%d\n", b);
    12. // *=
    13. int c = 10;
    14. c *= 2; // c=c*2 c=20
    15. printf("%d\n", c);
    16. // /=(除等于)
    17. int d = 30;
    18. d /= 10; // d=d/10 d=3
    19. printf("%d\n", d);
    20. // %=
    21. int e = 120;
    22. e %= 6; // e=e%6 e=0
    23. printf("%d\n", e);
    24. }

    2>  >>=  、 <<=

    1. #include
    2. int main()
    3. {
    4. // <<=
    5. int a = 10;
    6. a <<= 2; // a=a<<2 a=40
    7. //a 补码: 00000000 00000000 00000000 00001010
    8. //a<<2 : 00000000 00000000 00000000 00101000
    9. printf("%d\n", a);
    10. // >>=
    11. int b = 20;
    12. b >>= 2; // b=b>>2 b=5
    13. //b补码:00000000 00000000 00000000 00010100
    14. //b>>2 :00000000 00000000 00000000 00000101
    15. printf("%d\n", b);
    16. return 0;
    17. }

    3>  &=、|=、^=

    1. int main()
    2. {
    3. // &=
    4. int a = 10;
    5. a &= 2; // a=a&2 a=2
    6. printf("%d\n", a);
    7. // a补码:00000000 00000000 00000000 00001010
    8. // 2补码:00000000 00000000 00000000 00000010
    9. // a & 2:00000000 00000000 00000000 00000010
    10. // &(按位与):有0为0 同1为1
    11. // |=
    12. int b = 20;
    13. b |= 12; // b=b | 12 b=28
    14. printf("%d\n", b);
    15. // | (按位或) :有1为1,同0为0
    16. // b补码:00000000 00000000 00000000 00010100
    17. //12补码:00000000 00000000 00000000 00001100
    18. //b | 12:00000000 00000000 00000000 00011100
    19. // ^=
    20. int c = 30;
    21. c ^= 16; // c=c^16 c=14
    22. printf("%d\n", c);
    23. // ^ 相同为0 相异为1
    24. // c补码:00000000 00000000 00000000 00011110
    25. //16补码:00000000 00000000 00000000 00010000
    26. //c ^ 16:00000000 00000000 00000000 00001110
    27. return 0;
    28. }

    单目操作符

    操作数只有一个的操作符号

    !:逻辑反操作符

    -  :负值

    + :正值

    & :取地址

    sizeof 操作符

    sizeof 操作符 是一个操作符,要区分它与函数

    sizeof 主要用于计算数据类型在内存中的大小(单位是字节)

    在计算变量的大小的时候sizeof的括号可以省略

    ~ :对一个数的二进制位按位取反

    1. #include
    2. int main()
    3. {
    4. // ! 逻辑反
    5. if (!1)
    6. printf("!1为真\n");
    7. else
    8. printf("!1为假\n");
    9. // - 、+ 号
    10. int a = -10;
    11. a=-a;
    12. printf("%d\n", a);
    13. int b = 20;
    14. b = +b;
    15. printf("%d\n", b);
    16. // & 取地址
    17. int c = 30;
    18. printf("%p\n", &c);
    19. // sizeof操作符
    20. int d = 40;
    21. printf("%d\n", sizeof(d));
    22. printf("%d\n", sizeof (int));//类型的括号不能省略
    23. printf("%d\n", sizeof d);//括号可以省略
    24. // ~ 按位取反 只能运算与整数
    25. int e = 50;
    26. printf("%d\n", e);//未操作前
    27. int f = ~e;// 对e 按位取反 赋值给f
    28. //f=-(1+2+16+32) f=-51
    29. printf("%d\n", f);
    30. // e补码:00000000 00000000 00000000 00110010
    31. //~e补码:11111111 11111111 11111111 11001101
    32. // :10000000 00000000 00000000 00110010
    33. //~e原码:10000000 00000000 00000000 00110011
    34. return 0;
    35. }

    sizeof与数组

    sizeof(数组名):表示整个数组在内存中所占空间的大小 单位是字节

    sizeof  在计算数组大小 的时候 在函数内跟函数外是有区别的

    1. #include
    2. void MAX(int arr[])
    3. {
    4. int b = sizeof(arr);
    5. // 在32位下是4 在64位下是8
    6. printf("%d\n", b);
    7. //因为数组在传参的时候传的是数组名,数组名是首元素地址
    8. //所以在传参的时候传的是指针
    9. // 函数里面得用指针来接受,我们只是将形参写成了数组的形式,但其本质上是一个指针
    10. //指针在32位下占4个字节,在64位下占个字节
    11. }
    12. int main()
    13. {
    14. int arr[5] = { 1,2,3,4,5 };
    15. //计算整个数组的大小
    16. int a = sizeof(arr);
    17. printf("%d\n", a);
    18. //调用函数 函数实参是数组名
    19. MAX(arr);
    20. return 0;
    21. }

    - - 自减

    前置--:先--,后使用 (先让变量自减1,再使用)

    后置--:先使用,后--  (先使用,再让变量自减1)

    1. #include
    2. int main()
    3. {
    4. //前置--
    5. int a = 10;
    6. int b = --a;
    7. //此代码执行了两部操作
    8. // 第一步:a=a-1;
    9. // 第二步:b=a;
    10. printf("%d\n", b);//b的值为9
    11. //后置--
    12. int c = 20;
    13. int d = c--;
    14. //此代码也执行了两步操作
    15. // 第一步:d=c;
    16. // 第二步:c=c-1;
    17. printf("%d\n", d);//d的值为20
    18. return 0;
    19. }

    ++ 自增

    前置++:先++后使用(先让变量自增1,再使用)

    后置++:先使用后++(先使用,再让变量自增1)

    1. #include
    2. int main()
    3. {
    4. //前置++
    5. int a = 10;
    6. int b = ++a;
    7. //分为两步
    8. // a=a+1;
    9. // b=a;
    10. // 先让a自增1 再使用a 把a的值赋给b
    11. printf("%d\n", b);//b的值为11
    12. //后置++
    13. int c = 20;
    14. int d = c++;
    15. //分为两步
    16. // d=c;
    17. // c=c+1;
    18. //先使用c 把c的值赋给d 再让c自增1
    19. printf("%d\n", d);//d的值为20
    20. return 0;
    21. }

    *  解引用操作符

    解引用操作符,也被叫做间接访问操作符,运用于指针

    作用:将指针变量进行解引用操作,就是取到指针变量所指向的内容

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. //定义一个整型指针变量,里面存放的是整型变量a的地址
    6. int* p = &a;
    7. //我们将指针变量解引用操作
    8. // 取到的是指针变量p所指向的内容 也就是a
    9. printf("%d\n", *p);// 10
    10. //同理:*p 其实就是 a
    11. //也可给其赋值
    12. *p = 20;
    13. //此时a的值被赋值成20
    14. printf("%d\n", a);// 20
    15. return 0;
    16. }

    (类型) 强制类型转换

    强制类型转换就是将一种类型的数据,强制转换成另一种类型的数据

    注意:当大类型往小类型转换时会发生截断

    当 float 或者 dauble 类型强转为 int 类型时: 发生截断 取到的是整数部分

    当 char 类型 强转为 int 类型时:取到的是其对于的 ACSII码值

    1. #include
    2. #include
    3. int main()
    4. {
    5. // float 转 int 截断取整数部分
    6. float a = 3.14f;
    7. int b = (int)a;
    8. printf("%d\n", b);// b为3
    9. // double 转 int 截断取整数部分
    10. double d = 4.225;
    11. int e = (int)d;
    12. printf("%d\n", e);// e为4
    13. // char 转 int 取到ASCLL值
    14. char c = 'A';
    15. int f = (int)c;
    16. printf("%d\n", f);// f 为 65
    17. //动态内存开辟
    18. // 将在堆区上开辟的空间强制转化为int* 类型 赋给 指针p
    19. int* p = (int*)malloc(sizeof(int)* 13);
    20. //时间戳产生随机数
    21. //将time 函数的返回值强制转化成 unsinged int (无符号整型)
    22. // srand 函数的参数是一个无符号整型所以强制类型转换
    23. srand((unsigned int)time(NULL));
    24. int x = rand();//产生一个 0 - 32767 的随机数
    25. printf("%d\n", x);//每次打印出现的结果都不一样
    26. return 0;
    27. }

    关系操作符

    >、>=、<、<=、==、!=

    跟数学中的判断一样,

    不过在这里多了一个 != (不等于):判断两个数是否不相等

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. int b = 20;
    6. if (a > b)
    7. {
    8. printf("a>b\n");
    9. }
    10. if (a < b)
    11. {
    12. printf("a);
    13. }
    14. if (a == b)
    15. {
    16. printf("a==b\n");
    17. }
    18. if (a != b)
    19. {
    20. printf("a!=b\n");
    21. }
    22. int c = 20;
    23. int d = 30;
    24. if (c >= d)
    25. {
    26. printf("c>=d\n");
    27. }
    28. if (c <= d)
    29. {
    30. printf("c<=d\n");
    31. }
    32. return 0;
    33. }

    逻辑操作符

    && 逻辑与

    && 并且操作符:只要一个条件为假,结果就为假,全部为真结果才为真

    短路现象:当我们 && 多个条件时:若第一个条件为假,则结果直接为假,后面的条件不会对其进行判断(也就是只要遇到假条件,后面的所有条件都不会被判断) 

    1. #include
    2. int main()
    3. {
    4. // 输入一个年份
    5. //判断是否 能被4整除 并且 不能被100整除
    6. //若能 打印出这个年份
    7. int year = 0;
    8. scanf("%d", &year);
    9. if ((year % 4 == 0) && (year % 100 != 0))
    10. {
    11. printf("此年份为:%d\n",year);
    12. }
    13. else
    14. {
    15. printf("%d 年份 (能被4整除并且不能被100整除)不成立\n", year);
    16. }
    17. return 0;
    18. }

    ||  逻辑或

    || 或者操作符: 只要有一个条件为真结果就为真,全都为假 结果才为假

    短路现象:当我们判断的条件只要遇到条件为真,后面的条件就不判断

    1. #include
    2. int main()
    3. {
    4. //判断闰年
    5. //能被4整除并且不能被100整除,或者能被400整除的年份是闰年
    6. int year = 0;
    7. scanf("%d", &year);
    8. if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
    9. {
    10. printf("%d 年 是闰年\n",year);
    11. }
    12. else
    13. {
    14. printf("%d 年 不是闰年\n",year);
    15. }
    16. return 0;
    17. }

    ! 逻辑非

    ! 逻辑反操作符

    让真变为假,假变为真

    1. #include
    2. int main()
    3. {
    4. // 在C语言中数字 0 表示假,非0数字表示真
    5. int a = 10;
    6. if (!a)
    7. {
    8. printf("!a 为真\n");
    9. }
    10. else
    11. {
    12. printf("!a 为假\n");
    13. }
    14. return 0;
    15. }

    条件操作符

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

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

    条件操作符,又叫三目运算符,因为有三个操作数

    当表达式1 为真执行表达式2 ,否则执行表达式3

    1. #include
    2. int main()
    3. {
    4. //输入两个数打印两个数中的较大值
    5. int a = 0;
    6. int b = 0;
    7. scanf("%d %d", &a, &b);
    8. int max = (a > b ? a : b);
    9. printf("%d\n", max);
    10. //a > b ? printf("%d\n", a) : printf("%d\n", b);
    11. return 0;
    12. }

    逗号表达式

    表达式1,表达式2,……,表达式n

    逗号表达式就是用逗号隔开多个表达式

    逗号表达式从左向右依次执行

    逗号表达式的结果就是最后一个表达式

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. int b = 20;
    6. int c = 30;
    7. //d的结果就是逗号表达式中最后一个表达式的结果
    8. //也就是将c的值赋给d
    9. int d = (a, b, c);
    10. printf("%d\n", d); // d为30
    11. }

    下标引用操作符

    [] 下标引用

    [] 下标引用操作符 ,以索引的方式操作数组

    [下标数]

    1. #include
    2. int main()
    3. {
    4. int arr[5] = { 1,2,3,4,5 };
    5. //下标引用
    6. arr[0] = 8;
    7. //打印数组
    8. int i = 0;
    9. for (i = 0; i < 5; i++)
    10. {
    11. printf("%d ", arr[i]);
    12. }
    13. return 0;
    14. }

    函数调用操作符

    ()

    函数名():进行函数调用 

    ()里面可以有参数,也可以没有参数

    函数调用操作符,至少有一个操作数,函数名也是它的操作数,其余操作数就是所传的参数

    1. #include
    2. void Print(int a)
    3. {
    4. printf("%d\n", a);
    5. }
    6. int main()
    7. {
    8. int a = 10;
    9. Print(a);//() 有两个操作数 函数名和a
    10. return 0;
    11. }

    结构体成员访问操作符

    .  操作符

    结构体变量 . 成员变量

    用结构体变量访问结构体成员 

    1. #include
    2. //创建结构体
    3. struct SS {
    4. char name[10];
    5. int age;
    6. };
    7. int main()
    8. {
    9. //创建结构体变量并初始化
    10. struct SS s1 = { "张三",18 };
    11. //访问结构体成员(结构体变量 . 成员变量)
    12. printf("名字:%s 年龄:%d\n", s1.name, s1.age);
    13. }

    -> 操作符

    结构体指针->结构体成员变量

    用结构体指针访问成员

    1. #include
    2. //创建结构体
    3. struct SS {
    4. char name[10];
    5. int age;
    6. };
    7. int main()
    8. {
    9. //创建结构体变量并初始化
    10. struct SS s1 = { "张三",18 };
    11. //创建结构体指针变量 让其指向s1
    12. struct SS* p = &s1;
    13. // 用结构体指针访问成员(->)
    14. printf("名字:%s 年龄:%d\n", p->name, p->age);
    15. }

    隐式类型转换

    整型提升

    在C语言中,当小于int 类型的 其它类型在计算的时候会将其 转化成int 类型进行计算

    最后在进行截断赋给接收值的类型,若是int 则不截断

    在整型提升过程中 不足整型的类型数 :

     无符号数二进制位前面补0,有符号数二进制位前面补1  补够一个int 类型大小即可 

    1. #include
    2. int main()
    3. {
    4. short a = 10; //在内存中占两个字节
    5. //二进制表示:00000000 00001010
    6. char b = 1;//在内存中占一个字节
    7. //二进制表示:00000001
    8. short c = a + b;
    9. //在计算的时候进行整型提升在计算
    10. // 无符号数前面补0,有符号数补符号位
    11. // a提升:00000000 00000000 00000000 00001010
    12. // b提升:00000000 00000000 00000000 00000001
    13. // a+b :00000000 00000000 00000000 00001011
    14. //放进c中的时候因为c是short类型所以要发生截断
    15. // c : 00000000 00001011
    16. // c=11
    17. printf("%d\n", c);
    18. return 0;
    19. }

    算术转换

    在进行计算时:如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型  这就是算术转换

    long double

    double

    float

    unsigned long int

    long int

    unsigned int

    int

    自下而上,进行算术转换

    1. #include
    2. int main()
    3. {
    4. int a = 3;
    5. double b = 3.14;
    6. double c = a + b;
    7. //此时会将整型变量a 算术转换成 double 类型 进行计算
    8. printf("%lf\n", c);
    9. return 0;
    10. }

    操作符的属性

    1、操作符的优先级

    多个相邻操作符混合计算时,我们就得考虑操作符的优先级

    优先级高的先计算

    2、操作符的结合性

    有些操作符是具有结合性的既遵从从左向右计算,也遵从特殊的两个先结合计算

    3、操作符是否控制求值顺序

    有些操作符是控制求值顺序的

    像,逗号表达式、三目运算符、逻辑与、逻辑或,都是控制求值顺序的,从左向右依次执行

    看图参考:

     

  • 相关阅读:
    计算机网络 | 06.[HTTP篇] HTTP/1.1如何优化
    节日网页HTML代码 学生网页课程设计期末作业下载 清明节大学生网页设计制作成品下载 DW节日网页作业代码下载
    leetcode 155. Min Stack最小栈(中等)
    【附源码】计算机毕业设计JAVA学生信息管理系统2021
    Flutter 实现背景图片毛玻璃效果
    ansible常见避坑指南
    【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?)
    基于lex和yacc的词法分析器+语法分析器
    RISC Zero的Bonsai证明服务
    nacos不同局域网如何相互调用?nacos微服务云开发,远程联调部署,内网穿透,frp部署
  • 原文地址:https://blog.csdn.net/dd811923461/article/details/127817050