《C语言精讲攻略第九课》还不懂操作符,那是你没看见这个!!!

在这里插入图片描述

我只相信命运是掌握在自己手中的

希望各位哥哥姐姐们留下宝贵的批评,您的建议就是我前进的动力

这里也祝各位哥哥姐姐早日到达自己的星辰大海

🚀1.操作符分类

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

🚀2.算术操作符

+ - * / %

在这里插入图片描述

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

2.对于 / 操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数,执行的就是浮点数除法。

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

🚀3.移位操作符

🚁3.1左移操作符

==<<==左移操作符

移位操作符实际上移动的是二进制位。
在这里为大家简单介绍一下计算机里面的二进制八进制十进制十六进制
大家不要把这几种进制看的太难了,其实它们也只不过是数值的表达形式而已
比如:

在这里插入图片描述

整数的二进制表示形式有三种:原码反码补码

原码:将一个整数按照正负直接翻译成二进制称为原码
反码:原码符号位不变,其他位按位取反
补码:反码加1

下面对这三种形式进行以下讲解:

在这里插入图片描述

我们在VS中调试一个例子看一下
在这里插入图片描述

这里为什么是 fb ff ff ff 呢?因为:
在这里插入图片描述

请看下面的例子为大家讲解左移操作符:
在这里插入图片描述

在这里插入图片描述

注意:移位之后只是这个动作所得出的结果发生了变化,但是a本身是没有发生变化的,移位前a=5,移位之后a还是等于5!
以上就是左移操作符,您学废了嘛!下面请看它的兄弟友谊操作符

🚁3.2右移操作符

首先,先给大家提前说一下右移操作符的移位规则:
右移操作符分为两种:
1.逻辑右移左边用0填充,右边丢弃
2.算术右移左边用原该值的符号位填充,右边丢弃

右移的时候到底是采用算术右移还是逻辑右移呢?这取决于我们的编译器!
举一个简单的小例子你一下就明白了了:
在这里插入图片描述

🚀4.位操作符

位操作符:
& - 按位与
| - 按位或
^ - 按位异或

这里的位指的是二进制位
按位与:
在这里插入图片描述
按位或:
在这里插入图片描述

按位异或:
在这里插入图片描述

操作符例题:

编写代码实现,求一个整数存储在内存中的二进制中的1的个数:

int count_one(int num)
{
	int i = 0;
	int count = 0;
	for (i = 0; i < 32; i++)
	{
		if (num & 1 << i)
		{
			count++;
		}
	}
	return count;
}
int main()
{
	int num = 0;
	scanf("%d", &num);
	int ret = count_one(num);
	printf("%d", ret);
	return 0;
}

在这里插入图片描述

讲解num & 1: 假设输入的数字是5,1的补码是00000000000000000000000000000001,用最后一位的1一直左移去按位与5的补码的每一位,当1与5的补码中的1按位与时,就会得到一个1,条件语句就会执行一次,count就进行++一次;

代码的优化:

int main()
{

	int num = 0;
	scanf("%d", &num);
	int count = 0;
	while (num)
	{
		count++;
		num = num & (num - 1);
	}
	printf("%d", count);
	return 0;
}

在这里插入图片描述

代码讲解
在这里插入图片描述

这个算法的总结:

给定变量一个数值,用这个数值 & 一个比他小1的数值,因为小1的数字的二进制中的1的个数肯定会比这个数值二进制中的1的个数少1个,这样就会消掉一个1,然后再把这个按位与的结果重新赋值给这个变量,然后再继续 & 一个小1的数字……一直循环,直到最后变为全0!

一道变态的面试题
不能创建临时变量(第三变量),实现两个数的交换。
要想进行两个数的交换,我们第一想到的是下面这种情况:创建一个tmp变量进行交换,但是,题目要求不能创建临时变量,那么请看第二种解法:
在这里插入图片描述

第二种解法:
在这里插入图片描述

这里是先将 a + b的值附给了a等于8,然后将a - b的值赋给了b等于3,然后再将a - b的值赋给了a等于3;这样完成了交换,但是,这种交换是存在bug的,如果两个数太大,加起来超过了一个整型所表示的范围,就会产生溢出!所以我们再一次对代码进行优化!

==第三种解法:==利用按位异或进行交换

int main()
{
	int a = 3;
	int b = 5;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d , b=%d", a, b);
	return 0;
}

在这里插入图片描述

在这里插入图片描述

异或的特点就是:绝对不会溢出,但是只能应用于整数

🚀5.赋值操作符

赋值操作符是、可以说是一个很棒而且很简单的赋值符。

int weight = 120;
weight = 90;//不满意就重新赋值
double salary = 10000.0;
salary = 20000.0

赋值操作符还可以连续使用,比如:

int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//尽量不要这样写,这样写不易于调试

复合赋值操作符
赋值符又可以和算术操作符联合起来一起使用,比如:
!= -= *= /= %= >>= <<= &= |= ^=

🚀6.单目操作符

🛫6.1单目操作符介绍

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

演示代码:

sizeof()

在这里插入图片描述

++ 和 - -

int main()
{
	//后置加加
	int a = 5;
	int b = a++;
	printf("a=%d, b=%d\n",a,b);
	//后置减减
	int c = 10;
	int d = c--;
	printf("c=%d, d=%d\n",c,d);

	//前置加加
	int A = 8;
	int B = ++A;
	printf("A=%d, B=%d\n", A, B);
	//前置减减
	int C = 6;
	int D = --C;
	printf("C=%d, D=%d\n", C, D);
	return 0;
}

在这里插入图片描述

前置++ 是先使用后++, 后置++是先++后使用,同理 - -也是一样

🛫6.2 sizeof和数组

下面用一段代码为大家讲解:

void test1(int arr[])
{
	printf("%d\n", sizeof(arr));
}
void test2(char ch[])
{
	printf("%d\n", sizeof(ch));
}
int main()
{
	int arr[10] = { 0 };
	char ch[10] = { 0 };
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(ch));
	test1(arr);
	test2(ch);
	return 0;
}

在这里插入图片描述

讲解:

在这里插入图片描述

今天的文章就到此结束了,希望大家可以多多评论,给出批评,您的意见就是我进步的动力,也祝各位哥哥姐姐们早日到达自己的星辰大海!

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值