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

news2024/11/19 7:12:07

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)、算术操作符(+、-、*、/、%)、赋值操作符(=、+=等)及单目操作符(++、–、+、-)。同时,介绍了强制类型转换的注意事项。下期我们将介绍输入输出和分支循环。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序 最新获取用户头像以及用户名

一.在小程序改版为了安全起见 使用用户填写来获取头像以及用户名 二.代码实现 <view class"login_box"><!-- 头像 --><view class"avator_box"><button wx:if"{{ !userInfo.avatarUrl }}" class"avatorbtn" op…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17&#xff0c;本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配

Android Java 屏幕适配 参考 今日头条适配依赖配置 添加设计屏幕尺寸 设置字体大小 通过切换不同屏幕尺寸查看字体大小 设置文本宽高 通过切换不同屏幕尺寸查看文本宽高 Android Compose 屏幕适配 <

从视频帧生成点云数据、使用PointNet++模型提取特征,并将特征保存下来的完整实现。

文件地址 https://github.com/yanx27/Pointnet_Pointnet2_pytorch?spm5176.28103460.0.0.21a95d27ollfze Pointnet_Pointnet2_pytorch\log\classification\pointnet2_ssg_wo_normals文件夹改名为Pointnet_Pointnet2_pytorch\log\classification\pointnet2_cls_ssg "E:…

Websocket如何分块处理数据量超大的消息体

若我们服务端一次性最大处理的字节数是1M,而客户端发来了2M的数据&#xff0c;此时服务端的数据就要被切割成两次传输解码。Http协议中有分块传输&#xff0c;而在Websocket也可以分块处理超大的消息体。在jsr356标准中使用javax.websocket.MessageHandler.Partial可以分块处理…

论文复现_How Machine Learning Is Solving the Binary Function Similarity Problem

1. 内容概述 前言&#xff1a;此代码库支持 USENIX Security 22 论文 《How Machine Learning Is Solving the Binary Function Similarity Problem》&#xff0c;作者包括 Andrea Marcelli 等人&#xff0c;提供了相关代码、数据集和技术细节。 关键内容&#xff1a;技术报告…

【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记&#xff1a;学习空间变换的三种数学表达形式。 文章目录 1. 旋转矩阵1.1 向量运算1.2 坐标系空间变换1.3 变换矩阵与齐次坐标 2. 旋转向量和欧拉角2.1 旋转向量2.2 欧拉角 3. 四元数 1. 旋转矩阵 1.1 向量运算 对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 …

【WPF】Prism学习(六)

Prism Dependency Injection 1.依赖注入&#xff08;Dependency Injection&#xff09; 1.1. Prism与依赖注入的关系&#xff1a; Prism框架一直围绕依赖注入构建&#xff0c;这有助于构建可维护和可测试的应用程序&#xff0c;并减少或消除对静态和循环引用的依赖。 1.2. P…

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

UniAPP快速入门教程(一)

一、下载HBuilder 首先需要下载HBuilder开发工具&#xff0c;下载地址:https://www.dcloud.io/hbuilderx.htmlhttps://www.dcloud.io/hbuilder.html 选择Windows正式版.zip文件下载。下载解压后直接运行解压目录里的HBuilderX.exe就可以启动HBuilder。 UniApp的插件市场网址…

PyAEDT:Ansys Electronics Desktop API 简介

在本文中&#xff0c;我将向您介绍 PyAEDT&#xff0c;这是一个 Python 库&#xff0c;旨在增强您对 Ansys Electronics Desktop 或 AEDT 的体验。PyAEDT 通过直接与 AEDT API 交互来简化脚本编写&#xff0c;从而允许在 Ansys 的电磁、热和机械求解器套件之间无缝集成。通过利…

SpringBoot源码解析(四):解析应用参数args

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args 目录…

【Linux】指令 + 重定向操作

Linux基本指令 一.Linux基本指令1.mv&#xff08;重要&#xff09;2.cat3.more和less&#xff08;重要&#xff09;4.head和tail5.date6.cal7.find&#xff08;重要&#xff09; 二.Linux相关知识点1. Linux系统中&#xff1a;一切皆文件2. 重定向操作1. 输出重定向2. 追加重定…

【精通 Readline 库】:优化 Shell 外壳程序的艺术

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

ESP-IDF VScode 项目构建/增加组件 新手友好!!!

项目构建 1.新建文件夹&#xff0c;同时在该文件夹内新建.c和.h文件 如图所示&#xff0c;在components中新建ADC_User.c、ADC_User.h、CMakeLists.txt文件。当然这里你也可以不在components文件夹内新建文件&#xff0c;下面会说没有在components文件夹内新建文件构建项目的方…

玩转N1盒子:速刷OpenWRT软路由系统并实现公网访问管理

文章目录 前言1. 制作刷机固件U盘1.1 制作刷机U盘需要准备以下软件&#xff1a;1.2 制作步骤 2. N1盒子降级与U盘启动2.1 N1盒子降级2.2 N1盒子U盘启动设置2.3 使用U盘刷入OpenWRT2.4 OpenWRT后台IP地址修改2.5 设置旁路由&无线上网 3. 安装cpolar内网穿透3.1 下载公钥3.2 …

机器学习4

九、线性回归 1、概念 假设存在多个点&#xff0c;需要使用一条线来保障尽量拟合这些点&#xff0c;寻找这条线就叫回归。 机器学习中一种有监督学习的算法,回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系。 2、损失函数 存…

【Java EE初阶---多线程(初阶)】初识计算机

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java &#xff0c;Java数据结构 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录…

网络安全之国际主流网络安全架构模型

目前&#xff0c;国际主流的网络安全架构模型主要有&#xff1a; ● 信息技术咨询公司Gartner的ASA&#xff08;Adaptive Security Architecture自适应安全架构&#xff09; ● 美国政府资助的非营利研究机构MITRE的ATT&CK&#xff08;Adversarial Tactics Techniques &…

生成式人工智能(AIGC)在软件开发设计模式课程教学中的应用

一、引言 软件设计模式作为软件工程领域的核心组成部分&#xff0c;对于提升软件系统的质量和可维护性至关重要。然而&#xff0c;传统的软件设计模式课程教学方法面临着诸多挑战&#xff0c;例如教师准备教学案例的过程繁琐&#xff0c;学生理解和应用具体案例难度较大&#…