文章目录
前言
初识操作符
注:只讲解最基础的部分,不涉及二进制
C语言中操作符总共有10种,分别是:
算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用、函数调用和结构成员。
一 .算术操作符
算术运算符主要有+(加)、-(减)、*(乘)、\(除)、%(求余)这些,而加减乘这三个与我们数学中的无异。下面主要给大家讲解 / 和 % 这两个操作符
代码如下(示例):
#include <stdio.h>
int main()
{
int a = 5;
int b = 2;
float c = 2.0;
//除
//1.操作符两边都是整型
printf("%d\n", a / b); //2
//2.操作数有一边是浮点型
printf("%f\n", a / c); //2.5
//求余(两边必须为整型,字符型也是特殊的整型)
printf("%d", a % b); //1
return 0;
}
在C语言中除号两边都是整型则采取整数除法
若有一边为浮点型,则会发生算术转换,比如上图中a会转换为浮点型,浮点型之间的除法执行浮点数除法,因此结果为2.5。
例如:
#include <stdio.h>
int main()
{
int a = 5;
float c = 2.0;
//2.操作数有一边是浮点型
printf("%f\n", a / c); //2.5
return 0;
}
注:%f 打印float浮点数据
%lf 打印double数据
**求余(两边必须为整型,字符型也是特殊的整型)**
#include <stdio.h>
int main()
{
int a = 5;
int b = 2;
//求余(两边必须为整型,字符型也是特殊的整型)
printf("%d", a % b); //1
return 0;
}
二.逻辑操作符
- && 逻辑与
- || 逻辑或
- ! 逻辑非
1.逻辑与
逻辑与是这么定义的
1 && 0 ----- 0
0 && 1 ----- 0
1 && 1 ----- 1
只有两个操作数都为非零(真)结果才为1(真)
2.逻辑或
逻辑或是这么定义的
1 || 0 ------ 1
0 || 1 ------ 1
0 || 0 ------ 0
只要两个操作数都为零(假)的时候结果才为0(假)
3.逻辑非
逻辑非是这么定义的
! 1 ------ 0
! 0 ------ 1
即1(真)取非则成0(假),0(假)取非则成1(真)
4.经典例题
下面有一道经典笔试题(from 360):
#include <stdio.h>
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
//程序输出的结果是什么?
这道题的答案是:
有很多小伙伴可能就疑惑了,为什么不是1 3 3 5呢,而是1 2 3 4,这是因为在逻辑与中,有一个有意思的现象,我们称之为短路现象,即当与左边的操作数为假的时候,整个表达式的结果就为假,后面的表达式就不进行计算了,什么意思呢?按本题思路来看,当a++为假的时候,整个表达式结果为0(假),如题这里a是后置++,且a的值恰好为0(假),因此后面的表达式就不进行运算,就得到了如上图的答案了。
同样,逻辑或也有这样的现象,当逻辑或的左边表达式结果为1(真),整个表达式的结果变为1(真),后面的表达式同样也不用参与运算。
————————————————
原文链接:https://blog.csdn.net/Nice_W/article/details/127515725
补充: i = a++||++b||d++时
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
// i = a++ && ++b && d++;
i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
//程序输出的结果是什么?
程序输出的结果是什么?
注:
- a++
- ++a
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;
int b = a++;//后置++,先使用,后++
//int b = a , a = a + 1
printf("%d\n %d\n", b , a);
return 0;
}
运算方法:后置++,先使用,后++
int b = a , a = a + 1
++前置,先++,后使用
a = a + 1,int b = a
三.赋值操作符
C语言中的相等用两个等于号表示(“==”)。
int a = 0;
+= --------- a += 1; ----------- a = a + 1;
-= --------- a -= 1; --------- a = a - 1;
*= --------- a *= 1; --------- a = a * 1;
/= --------- a /= 1; --------- a = a / 1;
%= --------- a %= 1; --------- a = a % 1;
. >>= --------- a >>= 1; --------- a = a >> 1;
<<= --------- a <<= 1; --------- a = a << 1;
&= --------- a &= 1; --------- a = a & 1;
|= --------- a |= 1; --------- a = a | 1;
^= --------- a ^= 1; --------- a = a ^ 1;
————————————————
四.单目操作符
单目操作符就是只有一个操作数的操作符
(类型) 强制类型转换
#include <stdio.h>
int main()
{
int a = (int)3.14;
printf("%d\n", a);
return 0;
}
运行:
sizeof操作符(操作数的类型长度(以字节为单位))
有很多人会将这个当作一个函数,实际上,这只是一个操作符
如何证明这一点呢?我们都知道函数的调用后面必须得加小括号,我们可以测试以下sizeof后面不加小括号是否可以运行便可。
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
printf("%d\n", sizeof arr);
return 0;
}
运行:【40,是计算整个数组的大小,单位是字节】
注:strlen是计算字符串长度 sizepf是计算数据所占空间大小
五.关系操作符
引用:图片
六.条件表达式(三目运算符)
表达式1 ? 表达式2 :表达式3;
如果表达式1的值为假,整个表达式的值为表达式3的值
简单的运用以下,如代码
由于a小于b成立,则表达式的值为a的值,然后赋值给c
因为1<2 ,所以c = a = 1
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 0;
c = a < b ? a : b;
printf("%d\n", c);
//最后c的值为1
return 0;
}
运行:
七.逗号表达式
表达式1,表达式2,表达式3.……表达式n
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = (a++, b += a, c = b); // b = b + a
printf("%d %d %d ", a, b, c);
return 0;
}
b += a = b = b + a
运行: