前面我们学习了操作符中的算术、移位、位、赋值操作符。今天我们再来研究单目操作符、关系、逻辑、条件操作符。
单目操作符 单目操作符介绍! 逻辑反操作
- 负值
+ 正值
& 取地址
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;
}
小结今天我们学习了单目操作符、关系、逻辑、条件操作符,相信大家看完有一定的收获。
种一棵树的最好时间是十年前,其次是现在! 把握好当下,合理利用时间努力奋斗,相信大家一定会实现自己的目标!加油!创作不易,辛苦各位小伙伴们动动小手,三连一波~~~,本文中也有不足之处,欢迎各位随时私信点评指正!
本节课的代码(gitee仓库)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧