C语言--操作符

目录

一.思维导图 

二.算术操作符

三.移位操作符

四.位操作符

五.赋值操作符

六.单目操作符

七.关系操作符

八.逻辑操作符

九.条件操作符

十.逗号表达式

十一.下标引用、函数调用和结构成


一.思维导图 

二.算术操作符

+加法
-减法
*乘法
/除法
%除法(取余)

1. 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。

2. 对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法(有一个及以上均可认为是浮点数操作)。

int main()
{
	int a = 7 / 2;
	printf("%d\n", a);
	double b = 7 / 2;
	printf("%lf\n", b);
	int c = 7.0 / 2;
	printf("%d\n", c);
	double d = 7.0 / 2;
	printf("%d\n",d );
	return 0;
}

3. %操作符的两个操作数必须为整数。返回的是整除之后的余数。

int main()
{
	int a = 7 / 3;
	printf("%d\n", a);
	int b = 7 % 3;
	printf("%d\n", b);
	return 0;
}

4.除数不可以为0

三.移位操作符

<<左移操作符

>> 右移操作符

注:移位操作符的操作数只能是整数

注:左移或右移,移动的都是变量中的二进制信息

注:整数在内存中存放的是补码,计算也是按照补码来进行计算的

int main()
{
	int a = 15;
	//00000000000000000000000000001111  - 原码
	//00000000000000000000000000001111  - 反码
	//00000000000000000000000000001111  - 补码
	int b = -15;
	//10000000000000000000000000001111  - 原码(第一位是符号位,1表示负,0表示正)
	//11111111111111111111111111110000  - 反码(原码符号位不变,其余按位取反)
	//11111111111111111111111111110001  - 补码(反码+1就是补码)
	return 0;
}
//移位移动的是补码的二进制序列
int main()
{
	int a = 15;
	int b = a >> 1;
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}

运行结果:二进制1111是15,二进制111是7

四.位操作符

&  按位与,对应二进制位有0则为0,两个同时为1才是1

int main()
{
	int a = 3;
	//00000000000000000000000000000011 -补码
	int b = -5;
	//10000000000000000000000000000101 
	//11111111111111111111111111111010 
	//11111111111111111111111111111011  -补码
	int c = a&b;
	//&---对应二进制位有0则为0,两个同时为1才是1
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//00000000000000000000000000000011---c补码
	printf("%d\n", c);
	return 0;
}

通过对于C的补码分析,我们得出C应该为3,代码运行结果也是3

|    按位或,对应二进制位有1则为1,两个同时为0才是0

int main()
{
	int a = 3;
	//00000000000000000000000000000011 -补码
	int b = -5;
	//10000000000000000000000000000101 
	//11111111111111111111111111111010 
	//11111111111111111111111111111011  -补码
	int c = a|b;
	//|---对应二进制位有1则为1,两个同时为0才是0
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111011---c补码
	//11111111111111111111111111111010
	//10000000000000000000000000000101--- -5
	printf("%d\n", c);
	return 0;
}

^    按位异或

int main()
{
	int a = 3;
	//00000000000000000000000000000011 -补码
	int b = -5;
	//10000000000000000000000000000101 
	//11111111111111111111111111111010 
	//11111111111111111111111111111011  -补码
	int c = a^b;
	//^---对应二进制位相同为0,相异为1
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111000---c补码
	//11111111111111111111111111110111
	//10000000000000000000000000001000--- -8
	printf("%d\n", c);
	return 0;
}

注:他们的操作数必须是整数,操作的是二进制位

一个小例子:

不能创建临时变量(第三个变量),实现两个数的交换

//不能创建临时变量(第三个变量),实现两个数的交换。
//当数特别大的时候不行的一个办法
int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a = %d b = %d\n", a, b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("交换后:a = %d b = %d\n", a, b);
	return 0;
}

能解决所有问题的方法:

a^a -> 0

a^0 -> a

a^b^a = a^a^b(异或 支持交换律)

int main()
 {
 int a = 10;
 int b = 20;
 a = a^b;
 b = a^b;
 a = a^b;
 printf("a = %d  b = %d\n", a, b);
 return 0;
 }

五.赋值操作符

复合赋值符 += ,-= , *=, /=, %=, >>=, <<=, &=, |=, ^=

int x = 10;
 x = x+10;
 x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁。

六.单目操作符

逻辑反操作
-  负值
+正值
&  取地址(取出某个变量的地址)
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
--前置、后置--
++前置、后置++
*  间接访问操作符(解引用操作符,通过指针变量存放的地址,找到指向的空间,内容)
(类型)强制类型转换

 !举例

int main()
{
	int flag = 5;
	if (flag == 0)
	{
		printf("1\n");
	}
	if (!flag)//若flag为假,!flag为真,打印2
	{
		printf("2\n");
	}
	if (flag)
	{
		printf("3\n");
	}
	return 0;
}

运行结果:

sizeof 求变量(类型)所占空间的大小。

sizeof不是函数,是操作符。计算的是类型创建变量的大小,单位是字节

int main()
{
	int a = -10;
	int* p = NULL;
	printf("%d\n", !2);
	printf("%d\n", !0);
	a = -a;
	p = &a;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));

	return 0;
}

++和--的前置后置

前置:先自增/自减,再赋值

int main()
{
	int a = 10;
	int x = ++a;
	//先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。
	//a = a+1 =11,x=a=11
	int y = --a;
	//先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
	//a = a-1=11-1 =10,y = a=10
	return 0;
}

运算结果:

后置:先赋值,再自增/自减

int main()
{
	int a = 10;
	int x = a++;
	//先对a先使用,再增加,这样x的值是10;之后a变成11;
	//x = a = 10,a = a+1 = 11
	int y = a--;
	//先对a先使用,再自减,这样y的值是11;之后a变成10;
	//y =a = 11,a = a-1
	printf("x =%d y =%d", x,y );
	return 0;
}

运算结果:

七.关系操作符

> ,>= ,< ,<=, !=(用于测试“不相等”),==(用于测试“相等”)

注:在编程的过程中== 和=不小心写错,导致的错误。

八.逻辑操作符

&&             逻辑与(并且)

||                逻辑或(或者)

int main()
{
	int a = 0;
	int b = 5;
	scanf("%d %d", &a, &b);
	//a和b都是5,打印1
	if (a == 5 && b == 5)
	{
		printf("1\n");
	}
	//a或者b都是5,打印0(只要有1个是5即可)
	if (a == 5 || b == 5)
	{
		printf("0\n");
	}
	return 0;
}

观察代码,我们可以判断,当a和b都是5,打印1;a或者b都是5,打印0(只要有1个是5即可),输入3 5 ,我们来看看运行结果:

九.条件操作符(三目操作符)

exp1 ? exp2 : exp3

exp1exp2exp3
执行不执行
不执行执行

十.逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式。

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

十一.下标引用、函数调用和结构成员

1. [ ] 下标引用操作符

操作数:一个数组名 + 一个索引值

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

在上面的代码案例中,[ ]的两个操作数是arr和9。

2. ( ) 函数调用操作符

接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

对于函数调用操作符来说,最少有1个操作数(函数可以没有参数)

如下面main函数来说,

test1()的操作数是函数名test1

test2()的操作数是函数名test2和“hello”

void test1()
{
	printf("1\n");
}
void test2(const char* str)
{
	printf("%s\n", str);
}
int main()
{
	test1();
	//实用()作为函数调用操作符。
	test2("hello");//实用()作为函数调用操作符。
	return 0;
}

3. 访问一个结构的成员

.   结构体.成员名
->  结构体指针->成员名
struct Book
{
	//三个成员
	char name[30];
	char author[20];
	float price;
};

int main()
{
	struct Book b1 = { "书名1","作者1",66.5f };//书1
	struct Book b2 = { "书名2","作者2",21.5f };//书2
	//结构体变量.成员名
	//打印b1内容
	printf("%s %s %.1f\n", b1.name ,b1.author,b1.price);
	//打印b2内容
	printf("%s %s %.1f\n", b2.name, b2.author, b2.price);
	return 0;
}

运行结果:

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值