前言
前面我们学习了操作符中的算术、移位、位、赋值操作符。今天我们再来研究单目操作符、关系、逻辑、条件操作符。
单目操作符
单目操作符介绍
! 逻辑反操作 - 负值 + 正值 & 取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ * 间接访问操作符(解引用操作符) (类型) 强制类型转换
我们来代码演示一下>
int main() { int flag = 5; if (!flag)//对flag取反后判断是否为0 { printf("hello\n"); } else { printf("hehe\n"); } return 0; }
结果打印是“hehe”可以看出!是有一个取反的操作,屏幕上输出else
中的语句。
int main() { int a = 10; printf("%d\n", -a); printf("%d\n", +a);//+一般省略 printf("%p\n", &a); printf("%d\n", sizeof(a)); printf("%d\n", ~a); a = 10; printf("%d\n", a--); a = 10; printf("%d\n", --a); a = 10; printf("%d\n", a++); a = 10; printf("%d\n", ++a); return 0; }
我们再来深入研究一下sizeof和数组
之间的关系>
void test1(int arr[]) { printf("%d\n", sizeof(arr));//(2) } void test2(char ch[]) { printf("%d\n", sizeof(ch));//(4) } int main() { int arr[10] = { 0 }; char ch[10] = { 0 }; printf("%d\n", sizeof(arr));//(1) printf("%d\n", sizeof(ch));//(3) test1(arr); test2(ch); return 0; }
(1)(2)分别会输出什么呢?
(3)(4)分别会输出什么呢?
我们可以看到同样都是sizeof(arr),sizefo(ch),为什么输出的结果都不一样呢?
这就要回顾我们之前讲过的>
当数组传参的时候,实际上只是把数组的首元素地址传递过去了。
所以即使在函数参数部分写成数组形式:int arr[]表示依然是一个指针:int * arr。
那么sizeof(arr)的结果是4.
数组知识详解
//++和--运算符 //前置++和-- int main() { int a = 10; int x = ++a; //先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。 int y = --a; //先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10; return 0; }
//后置++和-- int main() { int a = 10; int x = a++; //先对a先使用,再增加,这样x的值是10;之后a变成11; int y = a--; //先对a先使用,再自减,这样y的值是11;之后a变成10; return 0; }
关系操作符
> >= < <= != 用于测试“不相等” == 用于测试“相等”
这些就很简单了,就不再多讲了
警告⚠:
请不要将==
写成=
喔!!!
逻辑操作符
逻辑操作符有哪些:
&& 逻辑与 || 逻辑或
区分逻辑与和按位与
区分逻辑或和按位或
1&2----->0 1&&2---->1 1|2----->3 1||2---->1
我们来看一道360的面试题>
int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++; printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d); return 0; }
在&&
表达式中有假则为假,当计算出一个为假的时候后面的就不参与运算,那么i = a++ && ++b && d++;
中只会执行到a++
,我们来看看运行结果>
我们把题目变一下>
int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++||++b||d++; printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d); return 0; }
在||
表达式中有真则真当计算出来为真的时候就停止运算,那么i = a++||++b||d++;
中执行到++b,就不会继续执行下去,我们来看看运算结果>
条件操作符
条件操作符也称三目运算符
exp1 ? exp2 : exp3
我们来举个例子练习一下>
if (a > 5) b = 3; else b = -3;
这些代码完全可以写成条件操作符>
a>5?b=3:b=-3
再来一个例子>
int main() { int a = 10; int b = 20; int m = 0; if (a > b) m = a; else m = b; m = (a > b ? a : b);//完全可以用这一行代码代替上面四行代码 return 0; }
小结
今天我们学习了单目操作符、关系、逻辑、条件操作符,相信大家看完有一定的收获。
种一棵树的最好时间是十年前,其次是现在! 把握好当下,合理利用时间努力奋斗,相信大家一定会实现自己的目标!加油!创作不易,辛苦各位小伙伴们动动小手,三连一波~~~,本文中也有不足之处,欢迎各位随时私信点评指正!