目录
一、单目操作符!、-、+、&、sizeof、~、--、++、*、(类型):
前言:
前面我们对操作符进行了简单的分类:
算术操作符 | 移位操作符 | 位操作符 |
赋值操作符 | 单目操作符 | 关系操作符 |
逻辑操作符 | 条件操作符 | 逗号表达式 |
下标引用、函数调用和结构成员 |
而在上一篇文章中我们学习了算数、移位、位与赋值操作符的相关知识。本文我将继续按照顺序,带领小伙伴们继续学习单目、关系、逻辑、条件这些我们在编写代码时常用的操作符。
一、单目操作符!、-、+、&、sizeof、~、--、++、*、(类型):
单目操作符,通俗的来讲就是只有一个操作数的操作符。是一类在进行操作时,只对一个操作数进行处理的操作符。
1.逻辑反操作!:
单目操作符' ! '表示逻辑反操作,即在逻辑层面表示“否”、“非”、“不”等含义,例如:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int flag = 1;
if (flag)
{
printf("FLAG\n");
}
if (!flag)
{
printf("!flag\n");
}
return 0;
}
编译运行查看输出打印结果:
我们可以看到,在我们定义了一个值为1的变量flag后,我们使用了if分支语句进行了判断,判断的条件即为变量flag,此时flag的值为1判断为逻辑“真”,执行打印操作将“ FLAG ”字样打印在了我们的屏幕上。
接着我们又使用另一个if分支语句进行了判断,此时的判断条件变成了对flag进行逻辑反操作,也就是此时flag为1,判断为“真”,逻辑取反,为“假”,则不执行第二个if语句中的操作,不打印字样“ !flag ”。
这样我们就知道了逻辑反操作符的作用方式了,那么它的作用会对值产生影响吗?我们一起来验证一下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int flag1 = 5;
int flag2 = !flag1;
int flag3 = !flag2;
printf("flag1 = %d\n", flag1);
printf("flag2 = %d\n", flag2);
printf("flag3 = %d\n", flag3);
return 0;
}
我们首先定义了一个值为5的变量flag1,接着定义了一个值为对flag1逻辑取反操作的变量flag2,又定义了一个值为对flag2逻辑取反操作的变量flag3。即flag2、flag3为两个对flag1连续进行两次逻辑取反操作的变量,并将它们的值全部打印在屏幕上,我们把它编译运行看看结果:
我们可以看到,该操作符在执行时是会对操作数的值造成影响的,当值为5时为真(在计算机的逻辑判断中,0为假,非0为真),进行逻辑取反后值变为0为假,再次进行逻辑取反操作后不会变为原本的值,而是变为了逻辑“真”值1。
2.正负值操作符-、+:
很多小伙伴们看到这里可能会有疑问了,上面不是说单目操作符指的是只有一个操作数的操作符吗?可是在执行加减操作时的操作符操作的是两个操作数呀?在这里小伙伴们应当注意,这里我们要学习的符号' - '和' + ',不是指算数运算中的加法和减法运算,而是用于表示数值政府的正负值操作符:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int flag1 = 5;
int flag2 = -flag1;
int flag3 = +flag1;
int flag4 = +flag2;
printf("flag2 = %d\n", flag2);
printf("flag3 = %d\n", flag3);
printf("flag4 = %d\n", flag4);
return 0;
}
我们可以看到,通过使用这两个单目操作符,我们可以改变数据元素值的正负,同时我们也看到,在正数前面使用正号' + '时,数据元素的之不会发生变化 ,故正数前的' + '可以省略,同时,由于正号不会对数据元素的值造成影响,所以绝大多数情况下会被省略,在我们编写代码的过程中,除了用于标记值的正负供我们自己进行区分外,基本不会用到: