【C语言】C语言操作符汇总

操作符的分类:

  1. 算术操作符
  2. 移位操作
  3. 位操作符
  4. 赋值操作符
  5. 单目操作符
  6. 关系操作符
  7. 逻辑操作符
  8. 条件操作符
  9. 逗号表达式
  10. 下标引用、函数调用和结构成员
  11. 操作符的属性

1.算术操作符:

+ - * / %

注意:%只能用于整数,返回的是整除之后的余数

2.移位操作

<<  左移操作符
>>  右移操作符

移位规则:
左移操作符:左边抛弃,右边补0
右移操作符:(1)逻辑位移 左边用0填充 ,右边丢弃
(2)算术位移 左边用该原值的符号位填充,右边丢弃
注意:不可用移位操作符移动负数位

3.位操作符

&   按位与
|   按位或
^   按位异或

示例代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 1;
	int b = 2;
	printf("%d\n",a&b);
	printf("%d\n",a|b);
	printf("%d\n",a^b);
	system("pause");

	return 0;
}

4.赋值操作符

=
int i = 1234;
int j = 10;
int z = 0;
i = j = z+1;//连续赋值

复合赋值符:

+=
*=
/=
%=
>>=
<<=
&=
|=
^=

例如:

int i = 5;
i = i+10;
i +=  10;//复合赋值

5.单目操作符

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

示例代码:

int main()
{
	int a= -15;
	int *p = NULL;
	printf("%d\n",!2);
	printf("%d\n",!0);
	a = -a;
	p = &a;
	printf("%d\n",a);
	printf("%d\n",*p);
	printf("%d\n",sizeof(a));
	printf("%d\n",sizeof(int));
	printf("%d\n",sizeof a);
	/*printf("%d",sizeof int);*/   //错误的写法
	system("pause");
	return 0;
}

在这里插入图片描述
6.关系操作符

>
>=
<
<=
!=			用于测试不相等
==			用于测试相等

注意:在编程中==和=不小心写错,会导致错误

7.逻辑操作符

&& 逻辑与
|| 逻辑或

示例代码:

int main()
{
	int a=0,b=2,c=3,d=4;
	int i = a++ && ++b && d++;
	printf(" a=%d\n b=%d\n c=%d\n d=%d\n",a,b,c,d);
	system("pause");
	return 0;
}

在这里插入图片描述

int main()
{
	int a=1,b=2,c=3,d=4;
	int i = a++ && ++b && d++;
	printf(" a=%d\n b=%d\n c=%d\n d=%d\n",a,b,c,d);
	system("pause");
	return 0;
}

在这里插入图片描述

int main()
{
	int a=1,b=2,c=3,d=4;
	int i = a++ || ++b || d++;
	printf(" a=%d\n b=%d\n c=%d\n d=%d\n",a,b,c,d);
	system("pause");
	return 0;
}

在这里插入图片描述

8.条件操作符

exp1 ? exp2 : exp3 

示例代码:

int main()
{
	int a=6,b=9;
	b= a>3 ? 2:4;
	printf("%d\n",b);     //2
	system("pause");
	return 0;
}

9.逗号表达式

exp1,exp2,exp3,...expn

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

示例代码:

int main()
{
int a = 1;
int b = 9;
int c =(a>b,a=b+10,a,b=a+1);  //20
printf("%d\n",c);
system("pause");
return 0;
}

10.下标引用、函数调用和结构成员
(1) [ ]下标引用操作符
操作数:一个数组名+一个索引值

int arr[10];  //创建数组
arr[9] = 10;  //实用下标引用操作符

(2) ( )函数调用操作符 接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数

示例代码:

#include<stdio.h>
#include<stdlib.h>
void test1()
{
	printf("Mercylin ");
}
void test2(const char *str)
{
	printf("%s\n",str);
}
int main()
{
	test1();                           //实用( )作为函数调用的操作符
	test2("Jackson");
	system("pause");
	return 0;
}

在这里插入图片描述

(3) 访问一个结构的成员

.        结构体.成员名
->       结构体指正->成员名

示例代码:

#include<stdio.h>
#include<stdlib.h>
struct S
{
	int data[1000];
	int num;
};
struct S s = {{1,2,3,4},1958};
void print1(struct S s)                     //结构体传参
{
	printf("%d\n",s.num);
}
void print2(struct S* ps)					//结构体地址传参
{
	printf("%d\n",ps->num);
}
int main()
{ 
	print1(s);             //传结构体
	print2(&s);				//传地址
	system("pause");
	return 0;
}

在这里插入图片描述

11.操作符的属性:

复杂表达式的求值有三个影响属性:
(1)操作符的优先级
(2)操作符的结合性
(3)是否控制求值顺序

注意:如果写出的表达式不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题的。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值