6.C操作符详解,深入探索操作符与字符串处理

C操作符详解,深入探索操作符与字符串处理

C语言往期系列文章目录

往期回顾:

  1. C语言是什么?编程界的‘常青树’,它的辉煌你不可不知
  2. VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦
  3. C语言入门:解锁基础概念,动手实现首个C程序
  4. C语言概念之旅:解锁关键字,字符,字符串的秘密,揭秘语句和注释,程序员的宝藏
  5. C语言基础入门:数据类型、变量声明与创建详解

文章目录

  • C操作符详解,深入探索操作符与字符串处理
  • C语言往期系列文章目录
  • 前言
  • 一、如何求字符串长度?
  • 二、算术操作符:+,-,*,/,%
    • 2.1 双目操作符
      • 2.1.1 + 和 -
      • 2.1.2 *
      • 2.1.3 /
      • 2.1.4 %
  • 三、赋值操作符:=和复合赋值
    • 3.1 连续赋值
    • 3.2 复合赋值
  • 4. 单目操作符:++,-- ,+,-
    • 4.1 ++ 和 --
      • 4.1.1 前置++和后置++
      • 4.1.2 前置- -和后置 - -
    • 4.2 +(正)和 -(负)
  • 5.强制类型转换
  • 总结


前言

在上一篇,我们深入探讨了C语言中的数据类型和变量声明与创建,从丰富的数据类型到变量的创建、初始化和分类,这些知识为我们进一步学习C语言奠定了坚实的基础。现在,我们已经站在了C语言世界的门口,窥见了其内部的无限可能。接下来的博客,我们将继续深入C语言的精髓,一起迈向更深层次的编程之旅。


一、如何求字符串长度?

上期学完数据结构类型后,我们这期从如何求字符串长度开始?
假设有一个字符“abc”,那我们如何求出这个字符串长度呢?其实,在我们的C语言库中,有一个函数叫做strlen函数。

strlen - string length

代码演示:

#include <stdio.h>
#include <string.h>

int main()
{
	int len = strlen("abc");//abc\0
	printf("%d\n", len);
	
	return 0;
}

但我们运行起来在vs中会看到报错。
在这里插入图片描述
其实我们还有个叫sizeof的函数,它返回的数据类型就是size_t。size_t就是unsigned int。
我们想要计算路径长度呢?

	int len = strlen("F:\Users\YunShanRuo\Desktop\1.docx");
	printf("%d\n", len);

这时候我们会发现出了问题,在这里插入图片描述
可以看到结果是30。这里是因为转义字符出了问题。通过这个例子重点是学会能够看出转义字符的作用。

二、算术操作符:+,-,*,/,%

写代码我们一定会涉及到算数,那为了计算,C语言提供了一些操作符。操作符呢也被称为运算符,不同的人对它的翻译是不一样的。有人叫他操作符,也有人叫它运算符,那其中有一组操作符叫:算术操作符。分别是: +、 - 、*、\ 、% ,都是双目操作符。

2.1 双目操作符

这些操作符又被称为,双目操作符。我们拿+号举例。

5 + 6

这个+号的左边是一个操作数,右边也是一个操作数,位于操作符两端的就是它们的操作数,我们把这样的操作符,叫做双目操作符。

2.1.1 + 和 -

运算符‘+’ 和 ‘-’ 是用来完成加法和减法的,它们都有两个操作数,位于操作符的两端就是它的操作数。
代码演示:

int main()
{
	int num1 = 3 + 7;
	printf("%d\n", num1);
	int num2 = 3 - 7;
	printf("%d\n", num2);

	return 0;
}

除此之外,变量还可以相加。

	          //10  -4
	int sum = num1 + num2;
	printf("%d\n", sum);

2.1.2 *

运算符 * ⽤来完成乘法。

int main()
{
	int n = 5;
	printf("%d\n", n * n);

	return 0;
}

2.1.3 /

运算符 / ⽤来完成除法。但是在C语言中又分整数除法浮点数除法。除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。
代码演示:
7 / 2 得到整数3 余数 1,这个是整数除法。

int main()
{
	int a = 7 / 2;//7/2=3...1

	printf("a = %f\n", a);
	printf("a = %d\n", a);

	return 0;
}

在屏幕上运行打印的结果,一个是3.000000,一个是3,无法得到我们想要的3.5.这时候我们就要执行浮点数除法了。
除号的两端,两个运算数必须至少有⼀个浮点数,这时C语言执行的是浮点数除法,得到的结果就是浮点数。

int main()
{
	float a = 7.0f / 2.0f;//7/2=3...1
	
	printf("a = %f\n", a);

	return 0;
}

练习题:
这段代码的结果是什么?

#include <stdio.h>

int main()
{
	int score = 5;
	score = (score / 20) * 100;
	
	return 0;
}

结果是0.
如果我们改成20.0,那么这段代码的运行结果就变成了25.

#include <stdio.h>

int main()
{
	int score = 5;
	score = (score / 20.0) * 100;
	
	printf("%f\n",score);
	return 0;
}

2.1.4 %

运算符 % 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
我们如何理解呢?其实说白了,这个就是在求余数。

	int a = 7 / 2;//商
	int b = 7 % 2;//%取模(取余)得到是是整除后的余数
	printf("a=%d\n", a);
	printf("b=%d\n", b);

注意:取余没有浮点数的取法。也就是说取余最终操作的还是整数。
负数取余
负数求模的规则是,结果的正负号由第一个运算数的正负号决定。

#include <stdio.h>

int main()
{
	printf("%d\n", 11 % -5); // 1
	printf("%d\n",-11 % -5); // -1
	printf("%d\n",-11 % 5); // -1
	
	return 0;
}

我们可以看到,最终结果的正负号,都是由第一个数的正负号决定的。

三、赋值操作符:=和复合赋值

在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。

	int a = 0;//初始化
	a = 20;//赋值,= 赋值操作符

赋值操作符 = 是一个随时可以给变量赋值的操作符。

3.1 连续赋值

赋值操作符也可以连续赋值,如:

	int a = 3;
	int b = 5;
	int c = 0;
	c = b = a + 3;//连续赋值,从右向左依次赋值的。

C语言虽然支持这种连续赋值,但是写出的代码不容易理解,也不方便调试,建议还是拆开来写,这样方便观察代码的执行细节。

	b = a + 3;
	c = b;

3.2 复合赋值

在写代码时,我们经常可能对一个数进行自增、自减的操作,如下代码:
比如现在有个a,然后我们想让它增加10

	int a = 3;
	a = a + 10;

像这样的过程我们可以简化,简化成+=,或者说是-=。像这样的复合赋值操作符有+=、-=、*=、/=、%=……

	int a = 3;
	a = a + 10;
	a += 10;//复合赋值

	a = a - 4;
	a -= 4;//复合赋值

还有这些也是复合赋值运算符。
在这里插入图片描述

4. 单目操作符:++,-- ,+,-

我们回过头来想一下,前面我们学的双目操作符,是因为他有两个操作数,而现在我们介绍的单目操作符,是不是意味着它只有一个操作数。而,++、–、+(正)、-(负) 就是单目操作符的。

4.1 ++ 和 –

++分前置++和后置++,- - 也分前置 - - 和后置 - - 。++ 就是自增1 的运算。

	a = a + 1
	a += 1
	a++ / ++a

前置和后置的区别是什么呢?我们得放在表达式中才能观察。

4.1.1 前置++和后置++

对于前置++的计算,我们有一个计算口诀:先++,后使用。

	int a = 5;
	int b = ++a;
	//a=a+1;b=a;
	printf("a=%d\n", a);//6
	printf("b=%d\n", b);//6

对比一下后置呢?我们同样有一个计算口诀。后置++,它的计算口诀:先使用,再++。

	int a = 5;
	int b = a++;
	//b=a;a=a+1;

	printf("a=%d\n", a);//6
	printf("b=%d\n", b);//5

4.1.2 前置- -和后置 - -

前置- - 和后置- -的各自计算同样有自己对应的口诀。前置- -计算口诀:先 - -,后使用,后置是:先使用,再 - -

//前置--
	int a = 5;
	int b = --a;
	//a=a-1;b=a;
	printf("a=%d\n", a);//4
	printf("b=%d\n", b);//4
//后置--
	int a = 5;
	int b = a--;
	//b=a, a=a-1
	printf("a=%d\n", a);//4
	printf("b=%d\n", b);//5

4.2 +(正)和 -(负)

这里的+是正号,-是负号,都是单目操作符。
运算符 + 对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。
+号加上不影响原先的值,也就是原先是负数后面还是负数。而-会改变原先值的正负号。

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

	return 0;
}

运算符 – 用来改变一个值的正负号,负数的前面加上 - 就会得到正数,正数的前面加上 - 会得到负数。

5.强制类型转换

对于强制类型转换,不推荐大家频繁的用,我们之前在接触数据类型的时候看过,我们说可以把double的浮点数加一个’f’,从而变成float。
而这种就是强制类型转换,它的语法很简单,就是在括号中放类型。

int main()
{
	int a = (int)3.14;//double

	printf("%d\n", a);
	return 0;
}

这时候只会打印,3,所以能不用强转就不用强转,强制类型转换也是个转换符。但其实操作符还没有讲完,之后还会进行详解。

总结

我们探讨了C语言中的字符串长度计算(strlen与sizeof)、算术操作符(+、-、*、/、%)、赋值操作符(=、+=等)及单目操作符(++、–、+、-)。同时,介绍了强制类型转换的注意事项。下期我们将介绍输入输出和分支循环。

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

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

相关文章

无需Photoshop即可在线裁剪和调整图像大小的工具

Bitmind是一个灵活且易于使用的批量图像本地化处理器&#xff0c;经过抓包看&#xff0c;这个工具在浏览器本地运行&#xff0c;不会上传图片到服务器&#xff0c;所以安全性完全有保证。 它可以将图像调整到任何特定尺寸&#xff0c;并在必要时按比例裁剪。 这是一个在线工具…

Flink1.19编译并Standalone模式本地运行

1.首先下载源码 2.本地运行 新建local_conf和local_lib文件夹&#xff0c;并且将编译后的文件放入对应的目录 2.1 启动前参数配置 2.1.2 StandaloneSessionClusterEntrypoint启动参数修改 2.1.3 TaskManagerRunner启动参数修改 和StandaloneSessionClusterEntrypoint一样修改…

【EtherCAT】关于TwinCAT的使用

1.TwinCAT扫描后会出现轴 双击打开parameter 设置跟随误差为FALSE 设置电子齿轮比&#xff0c;转动一圈进360mm 激活配置 右键新建工程 添加标准工程 添加库lib 必须添加才能使用运动指令 POUS找到main 添加变量 编译 登录PLC 未使能 写入值 手动指令

嵌入式八股文

硬件 1.CPU、MPU、MCU、SOC联系与差别 Cpu是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。差不多所有的CPU的运作原理可分为四个阶 段&#xff1a;提取&#xff08;Fetch&#xff09;、解码&#xff08;Dec…

外卖跑腿小程序源码如何满足多样需求?

外卖跑腿平台已经成了当代年轻人的便捷之选&#xff0c;校园中也不例外&#xff0c;那么外卖、跑腿小程序就需要满足用户多样化的需求&#xff0c;而这背后的源码扮演者最重要的角色。 用户类型的多样性 1.对上班族而言&#xff0c;他们希望外卖小程序能够快速下单、准确配送…

【Java语言】异常处理

异常 异常&#xff1a;在Java中程序执行过程中发生不正常行为。异常为多种&#xff0c;有算数异常、数组越界异常、空指针异常等&#xff08;这些是比较常见的异常&#xff09;&#xff1b; 异常的体系结构&#xff1a; 数组越界异常: ArrayIndexOutOfBoundsException。空指…

使用PSpice进行第一个电路的仿真

1、单击【开始】菜单&#xff0c;选择【OrCAD Capture CIS Lite】。 2、单击【File】>【New】>【Project】。 3、①填入Name下面的文本框&#xff08;提示&#xff1a;项目名称不要出现汉字&#xff09;&#xff1b; ②选择【Analog or Mixed A/D】&#xff1b; ③单击【…

深度剖析C++STL:手持list利剑,破除编程重重难题(上)

前言&#xff1a; C 标准模板库&#xff08;STL&#xff09;中的 list 容器是一个双向链表结构&#xff0c;它提供了高效的插入和删除操 作。与 vector 不同&#xff0c;list 中的元素不是连续存储的&#xff0c;因此可以在任何位置高效插入和删除元素&#xff0c;而无需移动其…

uniapp微信小程序转发跳转指定页面

onShareAppMessage 是微信小程序中的一个重要函数&#xff0c;用于自定义转发内容。当用户点击右上角的菜单按钮&#xff0c;并选择“转发”时&#xff0c;会触发这个函数。开发者可以在这个函数中返回一个对象&#xff0c;用于定义分享卡片的标题、图片、路径等信息。 使用场…

Matlab实现白鲸优化算法优化随机森林算法模型 (BWO-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 白鲸优化算法&#xff08;Beluga Whale Optimizer, BWO&#xff09;是一种受白鲸社会行为启发的新型群智能优化算法。该算法通过模仿白鲸群体中的合作和竞争机制来指导搜索过程&#xff0c;能够在复杂解空间中高…

c#基本数据类型占用字节长度/取值范围/对应.net类型

具体前往&#xff1a;c#基本数据类型占用字节数/取值范围/包装类-各基本类型.net类型,占用bit位数,默认值及取值范围

解决 IDEA 修改代码重启不生效的问题

前言 在使用 IntelliJ IDEA 进行 Java 项目开发时&#xff0c;有时会遇到一个令人头疼的问题&#xff1a;修改了代码后&#xff0c;重启服务却发现更改没有生效。通常情况下&#xff0c;解决这个问题需要通过 Maven 的 clean 和 compile 命令来强制重新编译&#xff0c;但这显…

React教程第二节之虚拟DOM与Diffing算法理解

1、什么是虚拟DOM 虚拟DOM 是javascript的一个对象&#xff0c;是内存中的一种数据结构&#xff0c;以树的形式存储UI的状态&#xff0c;树中的每个节点都代表着真实的DOM&#xff0c;用来描述我们希望在页面看到的 HTML结构&#xff1b; 现在的MVVM 框架&#xff0c;大多使用…

视觉SLAM相机——单目相机、双目相机、深度相机

一、单目相机 只使用一个摄像头进行SLAM的做法称为单目SLAM&#xff0c;这种传感器的结构特别简单&#xff0c;成本特别低&#xff0c;单目相机的数据&#xff1a;照片。照片本质上是拍摄某个场景在相机的成像平面上留下的一个投影。它以二维的形式记录了三维的世界。这个过程中…

【C++学习(35)】在Linux中基于ucontext实现C++实现协程(Coroutine),基于C++20的co_await 协程的关键字实现协程

文章目录 为什么使用协程协程的理解协程优势协程的原语操作yield 与 resume 是一个switch操作&#xff08;三种实现方式&#xff09;&#xff1a; 基于 ucontext 的协程基于 XFiber 库的操作1 包装上下文2 XFiber 上下文调度器2.1 CreateFiber2.2 Dispatch 基于C20的co_return …

用jquery做一个websocket客户端

先看效果图&#xff1a; 功能很简单&#xff0c;就是作为客户端连接websocket&#xff0c;并实现接受和发送消息。具体代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"…

本地音乐服务器(二)

4. 上传音乐模块设计 4.1 上传音乐的接口设计 请求和响应设计&#xff1a; 新建music实体类&#xff1a; Data public class Music {private int id;private String title;private String singer;private String time;private String url;private int userid; } 4.2 创建Mu…

GRPC实现

1.首先下载对应编译插件&#xff0c;这里不再提供下载 2.编写proto文件 3.编写完成用命令生成go文件 protoc --go_out. --go-grpc_out. *.proto --go_out. 其中的. 是说你要编译的 .proto 文件目录为当前目录&#xff0c;按需修改 --go-grpc_out.&#xff0c;其中的. 是说你生…

「Java EE开发指南」如何使用Visual JSF编辑器设计JSP?(一)

Visual JSF Designer的目标是使创建JSF应用程序的特定于组件的工作更容易可视化&#xff0c;在本教程中&#xff0c;您将使用可视化设计器设计JSF登录页面&#xff0c;将学习如何&#xff1a; 创建一个JSF项目创建一个新的JSF页面设计JSF页面 该功能在MyEclipse中可用。 MyE…

大模型(LLMs)RAG 版面分析——表格识别方法篇

大模型&#xff08;LLMs&#xff09;RAG 版面分析——表格识别方法篇 一、为什么需要识别表格&#xff1f; 表格的尺寸、类型和样式展现出多样化的特征&#xff0c;如背景填充的差异性、行列合并方法的多样性以及内容文本类型的不一致性等。同时&#xff0c;现有的文档资料不…