操作符(二) (单目操作符,逻辑操作符,条件操作符,逗号表达式)

1.单目操作符

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

(1)逻辑取反(!)

!0返回1;
!(非0)返回0;

因为0是假,非0是真,所以0取反为真返回1,非0取反为假返回0;

#include<stdio.h>
int main()
{
    
    
	printf("%d\n", !0);
	printf("%d\n", !2);
	printf("%d\n", !(-1));
	return 0;
}

在这里插入图片描述

(2)按位取反(~)

按位取反转换过来的二进制都是补码(包括符号位所有位置都取反)

eg1:求~1

#include<stdio.h>
int main()
{
    
    
	printf("%d\n", ~1);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

eg2: ~(-1)

#include<stdio.h>
int main()
{
    
    
	printf("%d\n", ~(-1));
	return 0;
}

在这里插入图片描述
在这里插入图片描述

2.逻辑操作符

&&     //逻辑与    有假为假
||     //逻辑或    有真为真
#include<stdio.h>
int main()
{
    
    
	printf("%d\n", 1 && 0);
	printf("%d\n", 1 && (-2));
	printf("%d\n", 1 || 0);
	printf("%d\n", 1 || (-2));
	return 0;
}

在这里插入图片描述

eg1:360笔试题

#include<stdio.h>
int main()
{
    
    
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;
	printf("i=%d\n a=%d\n b=%d\n c=%d\n d=%d\n",i, a, b, c, d);
	return 0;
}

解析:
  a++返回的是0;然后++所以a=1
  ++b先++b=3然后返回3
  因为逻辑或||有真(非0)为真;所以b以后的就没必要执行,所以i=1
  c=3,d=4;

在这里插入图片描述

eg2:例一变形

#include<stdio.h>
int main()
{
    
    
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("i=%d\n a=%d\n b=%d\n c=%d\n d=%d\n",i, a, b, c, d);
	return 0;
}

解析:
  a++返回的是0;然后++所以a=1
  因为逻辑与&&有假(0)为假;所以a以后的就没必要执行,所以i=0,
  b=2,c=3,d=4;

在这里插入图片描述

3.条件操作符

exp1?exp2:exp3

举例说明:

#include<stdio.h>
int Max(int a, int b)
{
    
    
	if (a > b)
	{
    
    
		return a;
	}
	return b;
}
int main()
{
    
    
	int x = 1,y = 2;
	printf("%d\n",Max(x,y));
	return 0;
}

如上代码用条件操作符写

#include<stdio.h>
int Max(int a,int b)
{
    
    
	return (a > b ? a : b);
}
int main()
{
    
    
	int x = 1,y = 2;
	printf("%d\n",Max(x,y));
	return 0;
}

4.逗号表达式

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果

#include<stdio.h>
int main()
{
    
    
	int a = 1, b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);
	printf("%d\n", c);
	return 0;
}

在这里插入图片描述

5.下标引用

[]  //下标引用操作符

操作符:一个数组名+一个索引值
int arr[10];
arr[9] = 10;
[]的两个操作数是arr和9

注:arr[9]等价于*(arr+9)

6.表达式求值的顺序

表达式的求值顺序的影响因素:
(1)操作符的优先级(优先级只能确定相邻两个操作符执行优先级 )
(2)操作符的结合性
(3)是否控制求值顺序
注:复杂表达式很容易出现歧义,因此一个表达式不要套多个操作符

7.连续赋值

#include<stdio.h>
int main()
{
    
    
	int a = 1, b = 2;
	a = b = 20;
	printf("a=%d b=%d\n", a,b);
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50886514/article/details/111178573
今日推荐