C语言——操作符(中)单目操作符、关系、逻辑、条件操作符

简介: C语言——操作符(中)单目操作符、关系、逻辑、条件操作符

前言

前面我们学习了操作符中的算术、移位、位、赋值操作符。今天我们再来研究单目操作符、关系、逻辑、条件操作符。


dca2361598714dbcaf6ea580feb8c51c.png


单目操作符

单目操作符介绍


!         逻辑反操作
-         负值
+         正值
&         取地址
sizeof    操作数的类型长度(以字节为单位)
~         对一个数的二进制按位取反
--        前置、后置--
++        前置、后置++
*         间接访问操作符(解引用操作符)
(类型)    强制类型转换


我们来代码演示一下>

int main()
{
  int flag = 5;
  if (!flag)//对flag取反后判断是否为0
  {
    printf("hello\n");
  }
  else
  {
    printf("hehe\n");
  }
  return 0;
}


593e0c73ee7244d494f20e4b938c1ac9.png


结果打印是“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;
}


8d3aea38fba24c29bf3aa2f5d1a4859b.png

我们再来深入研究一下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)分别会输出什么呢?


9056c5500b404fa796b3449bc5bece45.png


我们可以看到同样都是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


cdc1dc5d50f349549889fd363023b074.png


我们来看一道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++,我们来看看运行结果>



64fc2cd8845f4a7c8bb631fde02bbe8f.png


我们把题目变一下>

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,就不会继续执行下去,我们来看看运算结果>


dcbe5e87603d445a85339840551ba2e1.png


条件操作符

条件操作符也称三目运算符

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;
}


小结

今天我们学习了单目操作符、关系、逻辑、条件操作符,相信大家看完有一定的收获。


种一棵树的最好时间是十年前,其次是现在! 把握好当下,合理利用时间努力奋斗,相信大家一定会实现自己的目标!加油!创作不易,辛苦各位小伙伴们动动小手,三连一波~~~,本文中也有不足之处,欢迎各位随时私信点评指正!

相关文章
|
25天前
|
存储 网络协议 C语言
【C语言】位操作符详解 - 《开心消消乐》
位操作符用于在位级别上进行操作。C语言提供了一组位操作符,允许你直接操作整数类型的二进制表示。这些操作符可以有效地处理标志、掩码、位字段等低级编程任务。
71 8
|
25天前
|
C语言
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
63 7
|
26天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
28天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
45 2
|
2月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
51 10
|
2月前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
191 0
|
2月前
|
编译器 C语言 C++
【C语言】精妙运用内存函数:深入底层逻辑的探索
【C语言】精妙运用内存函数:深入底层逻辑的探索
|
存储 C语言
如何深入掌握C语言操作符及表达式求值(详解)(三)
本文章主要讲解点: ​​​​​​​各种操作符的介绍 表达式求值
如何深入掌握C语言操作符及表达式求值(详解)(三)
|
C语言
如何深入掌握C语言操作符及表达式求值(详解)(一)
本文章主要讲解点: ​​​​​​​各种操作符的介绍 表达式求值
如何深入掌握C语言操作符及表达式求值(详解)(一)
|
C语言 索引
如何深入掌握C语言操作符及表达式求值(详解)(二)
本文章主要讲解点: ​​​​​​​各种操作符的介绍 表达式求值