13-操作符(初识)

课前小技巧:VS中,想要复制哪一行,直接把鼠标放在哪一行,Ctrl+C即可,Ctrl+V直接自动复制到下一行

C语言非常灵活:C语言提供了非常丰富的操作符,使用起来比较灵活

13-1 算术操作符

+  -  *  /  %

这里主要讲解除法符合(/)和取模(%)

计算7/2:

int main()
{
	int a = 7/2;  //除法 关注商
	int b = 7%2;  //取模 关注余数
	printf("%d\n",a);
	printf("%d\n",b);
	return 0;

结果如下:

大家可能会疑惑:除法结果为什么不是3.5呢?

那是因为,除号的两端都是整数的时候,执行的是整数除法;如果两端只要有一个浮点数(当然两个都是也可以),执行的就是浮点数的除法

如果你想得到3.5的结果:

int main()
{
	float a = 7/2.0;  //将整数2改为浮点数2.0
	printf("%f\n",a);  //打印浮点数用%f
	return 0;
}

结果如下:

如果你不想要小数点后那么多0 :

int main()
{
	float a = 7 / 2.0;
	printf("%.1f\n", a);  //%.nf表示浮点数小数点后打印n位
	return 0;
}

完美!

 13-2 移位操作符

涉及二进制,暂时不讲,后续会讲

>>  //右移
<<  //左移

13-3 位操作符

暂时不讲,后续会讲

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

13-4 赋值操作符

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

解释如下:

int main()
{
	int a = 0;  //初始化
	a = 20;  //赋值

	a = a + 3;  //a=23
	a += 3;  //相当于a=a+3

	a = a - 3;
	a -= 3;  //相当于a=a-3

	return 0;
}

其余的同理

13-5 单目操作符

什么是单目操作符?

 a+b  //操作数是两个(a和b),所以+是双目操作符,单目操作符的操作数只有一个

单目操作符有哪些?

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

!

在C语言中,0表示假,非0表示真

代码举例:

int main()
{
	int flag = 0;  //为假
	if (!flag)  //为真,可以通过
	{
		printf("Hello World!");
	}
	return 0;
}

成功打印: 

再举一个例子:

int main()
{
	int flag = -1;  //为真
	if (!flag)  //为假,不能通过
	{
		printf("Hello World!");
	}
	return 0;
}

没有输出:

-

正变负,负变正

举例如下:

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

代码结果:

+

相当于没有,対值没有影响

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

结果如下:

&

这个在指针部分讲

sizeof

请大家记住:sizeof不是函数,而是操作符,并且是单目操作符!

举例:

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

结果如下:

 值得一提的是,sizeof(a)中的()可以去掉,这也证明了sizeof是操作符而不是函数:

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

仍然成功运行: 

但是要注意,sizeof(int)时的()不能省略 (红色曲线表示有问题)

我们再拓展一下吧~~~

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

结果如下: 

所以,此时计算的是整个数组的大小,单位是字节

 计算arr[0]的大小:

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

结果如下:

其实计算的就是数组中一个元素的大小

那如果计算sizeof(arr)/sizeof(arr[0])呢?

int main()
{
	int arr[10] = { 0 };
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr[0]));
	printf("%d\n", sizeof(arr)/sizeof(arr[0]));
	return 0;
}

结果不出意外,是10:

我们仔细想一想,这不就是该数组中元素的个数吗?40是数组中元素总的大小,4是1个元素的大小,那么40/4=10就是数组中元素的个数。所以我们得出结论:

求数组中元素的个数(以数组名为arr举例):

sizeof(arr)/sizeof(arr[0])

~

涉及到二进制,后期再讲

++

有前置和后置之分 

后置++:先使用,后++

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

结果如下:

 先使用,后++解释该代码,其实就是先把a的值赋给b,a的值再++

前置++:先++,后使用

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

结果如下:

先++,后使用解释该代码,其实就是a的值先++,再把a的值赋给b

--

有前置和后置之分,与++同理

后置--:先使用,后--

测试代码:

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

结果如下:

前置--:先--,后使用

测试代码:

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

结果如下:

 *

后期再讲

(类型)

举例:

int main()
{
	int a = 3.14;
	printf("%d\n", a);
	return 0;
}

运行后,编译器给出提示:

这是因为,3.14是字面浮点数,编译器默认理解为double类型

我们用(类型)进行强制类型转换:

int main()
{
	int a =(int) 3.14;
	printf("%d\n", a);
	return 0;
}

运行结果:

 编译器不再提醒:

13-6 关系操作符

>
>=
<
<=
!=  //用来测试“不相等”
==  //用来测试“相等”

 区分=与==

请大家考虑下面代码是否能够成功打印"Hello World!":

int main()
{
	int a = 10;
	if (a = 3)
	{
		printf("Hello World!");
	}
	return 0;
}

 答案是可以:

因为a=3是赋值,并不是判断a是否等于3。a起初是10,后来又被赋值为3,()里面的结果就是3,3非0,为真,所以成功打印

那么下面代码是否能够成功打印"Hello World!"呢?

int main()
{
	int a = 10;
	if (a == 3)
	{
		printf("Hello World!");
	}
	return 0;
}

答案是不能:

 这里用的是a==3,是判断a是否等于3,很明显,a的值是10,并不等于3,自然就无法打印

13-7 逻辑操作符

&&  逻辑与  并且
||  逻辑或  或者

举一个生活中的例子:

①甲需要乙并且丙帮忙,那么乙和丙缺一不可

②甲需要乙或者丙帮忙,那么乙来、丙来、乙丙都来这三种情况都可以

&&

例子1:

int main()
{
	int a = 1;
	int b = 2;
	if (a&&b)  //a和b都为真才能打印
	{
		printf("Hello World!");
	}
	return 0;
}

结果:

例子2:

int main()
{
	int a = 0;
	int b = 2;
	if (a&&b)  //a和b有一个是0就不能打印
	{
		printf("Hello World!");
	}
	return 0;
}

 结果:

例子3:

int main()
{
	int a = 0;
	int b = 0;
	if (a&&b)  //a和b都为0当然也不能打印
	{
		printf("Hello World!");
	}
	return 0;
}

结果: 

||

例子1:

int main()
{
	int a = 10;
	int b = 23;
	if (a||b)  //a和b都为真当然能打印
	{
		printf("Hello World!");
	}
	return 0;
}

结果:

例子2:

int main()
{
	int a = 10;
	int b = 0;
	if (a||b)  //a和b有一个为真就能打印
	{
		printf("Hello World!");
	}
	return 0;
}

结果:

例子3:

int main()
{
	int a = 0;
	int b = 0;
	if (a||b)  //只有a和b都为0的时候不能打印
	{
		printf("Hello World!");
	}
	return 0;
}

 结果:

 13-8 条件操作符

也叫三目操作符:

exp1?exp2:exp3
//exp:表达式

含义:表达式1为真,表达式2的值为结果;表达式1为假,表达式3的值为结果。

举一个简单的例子:

int main()
{
	int a = 10;
	int b = 23;
	int r = a > b ? a : b;
	printf("%d\n", r);
	return 0;
}

代码结果:

其实很好理解,如果a>b,就取a的值作为结果,反之, 取b的值作为结果

当然,这个三目操作符可以嵌套,但是建议不要太复杂,这样不便于自己和他人理解

13-9 逗号表达式

理解:逗号表达式就是逗号隔开的一串表达式

特点:从左向右依次计算,整个表达式的结果是最后一个表达式的结果

举一个例子吧:

int main()
{
	int a = 10;
	int b = 20;
	int c = 0;
	//       c=8   a=28  5
	int r = (c=a-2,a=b+c,c-3);
	printf("%d\n", r);
	return 0;
}

结果如下:

13-10  下标引用、函数调用和结构成员

[]  ()  .  ->

[]

我们可以从以下程序理解:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };  //定义数组的语法形式,并不是操作符
	arr[3] = 20;
	printf("%d\n", arr[3]);
	return 0;
}

结果如下:

其实,在arr[3]=20中,[]就是下标引用操作符,arr和3就是[]的操作数

这里要注意,如果有变量n=3,arr[n]=20依旧可以运行,因为这里并不是创建数组,而是访问数组元素

换句话说,变量的值是程序运行出来的,而定义数组大小的时候要用常量明确给出数组大小

()

int Max(int x, int y)
{
	if (x > y)
	{
		return x;
	}
	else
	{
		return y;
	}
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("%d\n", Max(a, b));  //Max(a,b)中的()就是函数调用操作符,Add,2,3是()的操作数
	return 0;
}

.

后续再讲

->

后续再讲

呼~~~操作符咱们就暂且说到这里,由于是“初识”系列,所以有的没有讲,有的没有太深入,后续的文章会进行补充!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/461791.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WXML 模板语法

数据绑定 1. 数据绑定的基本原则 ① 在 data 中定义数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可 ② 在 WXML 中使用数据 2. Mustache 语法的格式 把 data 中的数据绑定到页面中渲染&#xff0c;使用 Mustache 语法&#xff08;双大括号&#x…

快速了解JavaScript

1.1 javaScript 历史 创始人 布兰登 艾奇 生于1961年 在1995设计LiveScript后改名为JavaScript 1.2 javaScript 是什么类型的语言 JavaScript是一种在客户端运行的脚本语言&#xff08;不需要编译&#xff0c;由js引擎逐行解释执行&#xff09; 1.3 JavaScript可以做什么 …

ts版本微信小程序在wxml保存文件不刷新页面的解决办法

将project.config.json中的skylineRenderEnable改为false "skylineRenderEnable": false

【理解机器学习算法】之岭回归Ridge - L2 Rgularization

Ridge 回归&#xff08;Ridge Regression&#xff09;也称作岭回归或脊回归&#xff0c;是一种专用于共线性数据分析的有偏估计回归方法。在多元线性回归中&#xff0c;如果数据集中的特征&#xff08;自变量&#xff09;高度相关&#xff0c;也就是说存在共线性(Multicollinea…

Kotlin 中List,Set,Map的创建与使用

目录 1. List 的使用 1.1 不可变 List 1.2 可变 List 2. Set 的使用 2.1 不可变 Set 2.2 可变 Set 3. Map 的使用 3.1 不可变Map 3.2 可变Map 本篇主要为已经有Java基础的同学展示Kotlin语言中的List&#xff0c;Set&#xff0c;Map的创建和使用&#xff0c;所以Java代…

STM32CubeMX与HAL库开发教程八(串口应用/轮询/中断/DMA/不定长数据收发)

目录 前言 初识串口-轮询模式 串口中断模式收发 串口DMA模式 蓝牙模块与数据包解析 前言 前面我们简单介绍过串口的原理和初步的使用方式&#xff0c;例如怎么配置和简单的收发&#xff0c;同时我们对串口有了一个初步的了解&#xff0c;这里我们来深入的来使用一下串口 …

基于高德地图JS API实现Vue地图选点组件

基于高德地图JS API2.0实现一个搜索选择地点后返回给父组件位置信息的功能&#xff0c;同时可以进行回显 目录 1 创建key和秘钥1.1 登录高德地图开放平台1.2 创建应用1.3 绑定服务创建秘钥 2 使用组件前准备2.1 导入loader2.2 在对应的组件设置秘钥2.3 引入css样式 3 功能实现…

记录dockers中Ubuntu安装python3.11

参考&#xff1a; docker-ubuntu 安装python3.8,pip3_dockerfile ubuntu22 python3.8-CSDN博客

揭示数据在内存中存储的秘密!

** ** 悟已往之不谏&#xff0c;知来者犹可追 ** ** 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#xff0c;别忘了给个免费的赞哟~ 整数在内存中的存储 整数的表达方式有三种&#xff1a;原码、反码、补码。 三种表示方法均有符号位和数值位两部分…

Oracle数据库:使用 bash脚本 + 定时任务 自动备份数据

Oracle数据库&#xff1a;使用 bash脚本 定时任务 自动备份数据 1、前言2、为什么需要自动化备份&#xff1f;3、编写备份脚本4、备份脚本授权5、添加定时任务6、重启 crond / 检查 crond 服务状态7、备份文件检查 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

matlab 平面桁架有限元受力分析计算

1、内容简介 略 62-可以交流、咨询、答疑 平面桁架有限元受力分析计算 2、内容说明 略 3、仿真分析 略 4、参考论文 略

宿主环境

1. 什么是宿主环境 宿主环境&#xff08; host environment &#xff09;指的是程序运行所必须的依赖环境。例如&#xff1a; Android 系统和 iOS 系统是两个不同的宿主环境。安卓版的微信 App 是不能在 iOS 环境下运行的&#xff0c;所以&#xff0c; Android 是安卓软件的宿…

“import ... =“ 只能在 TypeScript 文件中使用

当你遇到这个问题很苦恼。 可以按照以下解决办法 使用ctrlshiftP 修改"javascript.validate.enable": false

php中 0 == ‘’(0等于任意字符串) 判断是否成立 返回true

php中不同类型变量之间比较大小 一、背景二、探究0是为什么&#xff1f;三、探究 0all是为什么&#xff1f;四、程序中如何判断0是否等于指定字符串 一、背景 最近在项目实际开发中&#xff0c;我需要判断前端传来的参数值是否等于一个字符串&#xff1b;然后发现当参数值是0时…

MATLAB学习笔记(二)PDE求解偏微分方程组

一、利用PDE求解偏微分方程组 初值为&#xff1a; 针对上述方程组&#xff0c;利用matlab自带工具箱和函数PDE进行求解。 以下是matlab中对工具箱中pdepe函数的解释。 二、matlab编程 在matlab中编程&#xff0c;利用PDE函数求解以上偏微分方程。 clc; clear; syms y global …

【蓝桥杯单片机】十三届省赛“重难点”解析(附源码)

【蓝桥杯单片机】十三届省赛“重难点”解析 一、题目难点解析二、易出错点提示三、完整代码链接 笔记包括&#xff1a;①题目难点解析、②易出错点提示、③完整代码链接 注&#xff1a;本文提供的所有代码都是使用第十四届竞赛包完成 ⭐----------系列文章链接----------⭐ 【蓝…

Java初阶数据结构二叉树实现+练习完整(工程文件后序会进行上传)

i1.二叉树的概念 1.二叉树的定义 &#xff08;1&#xff09;二叉树可以是一个节点的有限集合 &#xff08;2&#xff09;可以为空 &#xff08;3&#xff09;或者是由一个根节点加上两棵分别称为左子树和右子树的二叉树组成的 &#xff08;4&#xff09;二叉树的每一个节点…

力扣细节题:字符串中的最大奇数

奇数只要找到第一位是奇数的即可&#xff0c;不是找单个数字 //即从最低位开始&#xff0c;找到第一位为奇数的位 //然后之前的就是需要的数字char * largestOddNumber(char * num){int i strlen(num) - 1;while(i > 0){if((num[i] - 0) % 2 1)break;i--;}//先找到低位开…

电子科技大学链时代工作室招新题C语言部分---题号E

1. 题目 这道题大概的意思是说&#xff0c;一座城市中被埋了许多雷&#xff08;用一个只含0和1的字符串表示城市&#xff0c;1代表有雷&#xff0c;0代表无雷&#xff09;。 你作为一个排雷兵&#xff0c;需要花最少的钱引爆所有的雷来使城市中不再有雷&#xff08;太逆天了&a…

Java宝典-异常

目录 1. 异常的分类1.1 运行时异常1.2 编译时异常 2. 异常的抛出2.1 throw2.2 throws 3. 异常的捕获3.1 try-catch3.2 finally 4. 异常执行的过程5. 自定义异常 在Java中&#xff0c;异常(Exception)是指程序发生不正常的行为&#xff0c;异常其实就是一个一个的类。 1. 异常的…