ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【C语言篇】操作符详解(上篇) [打印本页]

作者: 麻花痒    时间: 2024-8-3 18:01
标题: 【C语言篇】操作符详解(上篇)
操作符详解(上篇)

前言

   操作符又被叫做运算符,是差异的翻译,意思是一样的
  依据操作符的操作数有几个,分为单目双目三目操作符
  sizeof

强制类型转换

上述两种操作符在C语言数据类型和变量中已经做过具体介绍了,不熟悉的小同伴可以去看看
算术操作符

C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是: +、-、*、/、%,这些操作符都是双目操作符

  1. #include <stdio.h>
  2. int main()
  3. {
  4. float x = 6 / 4;
  5. int y = 6 / 4;
  6. printf("%f\n", x); // 输出 1.000000
  7. printf("%d\n", y); // 输出 1
  8. return 0;
  9. }
复制代码
上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是 1.5 。缘故原由就在于C语⾔⾥⾯的整数除法是整除,只会返回整数部门,丢弃⼩数部门。

  1. #include <stdio.h>
  2. int main()
  3. {
  4.         printf("%d\n", 3 / 2);//1
  5.     printf("%d\n", (-3) / (-2);//1
  6.         printf("%d\n", -3 / 2);//-1
  7. }
复制代码

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("%d\n", 11 % -5); // 1
  5. printf("%d\n",-11 % -5); // -1
  6. printf("%d\n",-11 % 5); // -1
  7. return 0;
  8. }
复制代码

赋值操作符

   在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
  1. int a = 100;//初始化
  2. a = 200//赋值
复制代码

  1. int a = 3;
  2. int b = 5;
  3. int c = 0;
  4. c = b = a+3;//连续赋值,从右向左依次赋值的。
复制代码
C语⾔虽然⽀持这种一连赋值,但是写出的代码不容易明白,建议照旧拆开来写,这样⽅便观察代码的执⾏细节。
在写代码时,我们经常可能对⼀个数进⾏⾃增、⾃减的操作,如下代码:
  1. int a = 10;
  2. a = a+3;
  3. a = a-2;
复制代码
这样代码C语⾔给提供了更加⽅便的写法:
  1. int a = 10;
  2. a += 3;
  3. a -= 2;
复制代码
C语⾔中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:
  1. += -=
  2. *= /= %=
  3. //下⾯的操作符之后讲解
  4. >>= <<=
  5. &= |= ^=
复制代码

逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。

逻辑取反运算符


⽐如,我们有⼀个变量叫 flag ,如果flag为假,要做⼀个什么事情,就可以这样写代码:
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int flag = 0;
  5. if(!flag)
  6. {
  7.         printf("do something\n");
  8. }
  9. return 0;
  10. }
复制代码
如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
所以上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码。
逻辑与运算符


&&就是与运算符,也是并且的意思&是⼀个双⽬操作符,使⽤的⽅式是 a&&b&两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
  1. int month = 0;
  2. scanf("%d", &month);
  3. if(month >= 3 && month <= 5)
  4. {
  5. printf("春季\n");
  6. }
复制代码
这⾥表达的意思就是month既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。
逻辑或运算符

|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
  1. int month = 0;
  2. scanf("%d", &month);
  3. if(month == 12 || month==1 || month == 2)
  4. {
  5. printf("冬季\n");
  6. }
复制代码

   输⼊⼀个年份year,判断year是否是闰年
  闰年判断的规则。 能被4整除并且不能被100整除是闰年 2. 能被400整除是闰年
  1. #include <stdio.h>
  2. //代码1
  3. int main()
  4. {
  5. int year = 0;
  6. scanf("%d", &year);
  7. if(year%4==0 && year%100!=0)
  8.         printf("是闰年\n");
  9. else if(year%400==0)
  10.         printf("是闰年\n");
  11. return 0;
  12. }
  13. //代码2
  14. int main()
  15. {
  16. int year = 0;
  17. scanf("%d", &year);
  18. if((year%4==0 && year%100!=0) || (year%400==0))
  19.          printf("是闰年\n");
  20. return 0;
复制代码
逻辑运算符特点:短路
C语⾔逻辑运算符另有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种环境称为“短路”。
如前⾯的代码:
  1. if(month >= 3 && month <= 5)
复制代码
表达式中&&的左操作数是 month >= 3 ,右操作数是 month <= 5 ,当左操作数 month >= 3 的 结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
对于 || 操作符是怎么样呢?我们团结前⾯的代码:
  1. if(month == 12 || month==1 || month == 2)
复制代码
如果month==12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。
所以, || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。

关系操作符

C语⾔⽤于⽐较的表达式,称为“关系表达式”(relational expression),⾥⾯使⽤的运算符就称为“关系运算符”(relational operator),主要有下⾯6个:

关系表达式通常返回 0 或 1 ,表⽰真假。 C语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如, 20 > 12 返回 1 , 12 > 20 返回 0 。 关系表达式常⽤于 if 或 while 布局。
  1. if (x == 5) {
  2. printf("x is 5.\n");
  3. }
复制代码
留意:相称运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写出下⾯的代码,它可以运⾏,但很容易出现料想之外的结果。
  1. if (x = 5)...
复制代码
上⾯⽰例中,原意是 x == 5 ,但是不⼩⼼写成 x = 5 。这个式⼦表⽰对变量 x 赋值5 ,它的返回值为5,所以 if 判断总是为真。 为了防⽌出现这种错误,有的步伐员喜欢将变量写在等号的右边。
  1. if(5 == x)...
复制代码
这样的话,如果把 == 误写成 = ,编译器就会报错。
另⼀个需要避免的错误是:多个关系运算符不宜连⽤。
  1. i < j < k
复制代码
上⾯⽰例中,一连使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
  1. (i < j) < k
复制代码
上⾯式⼦中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进⾏⽐较。如果想要判断变量 j 的值是否在 i 和 k 之间,应该使⽤下⾯的写法。
  1. i < j && j < k
复制代码

自增自减操作符

++是⼀种⾃增的操作符,⼜分为前置++和后置++
--是⼀种⾃减的操作符,也分为前置--和后置--.
  1. int a = 10;
  2. int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
  3. printf("a=%d b=%d\n",a , b);//11 11
  4. int a = 10;
  5. int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
  6. printf("a=%d b=%d\n",a , b);//11 10
复制代码
总结:

--操作符道理同上
+和-

这⾥的+是正号,-是负号,都是单⽬操作符。

  1. int a = +10; //等价于 int a = 10;
复制代码

  1. int a = 10;
  2. int b = -a;
  3. int c = -10;
  4. printf("b=%d c=%d\n", b, c);//这⾥的b和c都是-10
  5. int a = -10;
  6. int b = -a;
  7. printf("b=%d\n", b); //这⾥的b是10
复制代码

逗号表达式

  1. exp1, exp2, exp3, …expN
复制代码
逗号表达式,就是⽤逗号隔开的多个表达式。
逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。
  1. //代码1
  2. int a = 1;
  3. int b = 2;
  4. int c = (a>b, a=b+10, a, b=a+1);//逗号表达式
  5. //c是多少?
  6.    
  7.    
  8. //代码2
  9. if (a =b + 1, c=a / 2, d > 0)
  10.    
  11.    
  12. //代码3
  13. a = get_val();
  14. count_val(a);
  15. while (a > 0)
  16. {
  17. //业务处理
  18. //...
  19. a = get_val();
  20. count_val(a);
  21. }
  22. 如果使⽤逗号表达式,改写:
  23. while (a = get_val(), count_val(a), a>0)
  24. {
  25. //业务处理
  26. }
复制代码

以上就是操作符详解(上篇)的内容啦,各位大佬有什么题目接待在批评区指正,您的支持是我创作的最大动力!❤️


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4