【C语言】--操作符详解

🌭个人主页: 起名字真南
🍿个人专栏:【数据结构初阶】 【C语言】

请添加图片描述

目录

  • 1 算术操作符
    • 1.1 + 和 -
    • 1.2 *
    • 1.3 /
    • 1.4 %
  • 2 赋值操作符 :=
    • 2.1 复合赋值符
  • 3 单目操作符
    • 3.1 ++和- -
  • 4 强制类型转换
  • 5 printf 和 scanf
    • 5.1 printf
      • 5.1.1 基本用法
      • 5.1.2 占位符
      • 5.1.3 占位符列举
      • 5.1.4 输出格式

1 算术操作符

C语言中为了方便运算,提供了一系列的操作符,而其中有一组操作符叫做:算数操作符。分别是 +-、*、/%

注:操作符也叫做运算符。

1.1 + 和 -

+- 是用来做加法和减法的。
+- 都是有两个操作数的,位于操作符两端的就是他们的操作数,这种操作符也叫做双目操作符

int main()
{int x = 100 + 100;int y = 50 - 42;printf("%d\n", x);printf("%d\n", y);return 0;
}

1.2 *

运算符 * 用来运算乘法。

#include <stdio.h>
int main()
{int num = 5;printf("%d\n", num * num); // 输出 25return 0;
}

1.3 /

/ 用来运算除法
除号两端如果都是整数,执行的是整数除法,得到的结果也是整数。

#include <stdio.h>
int main()
{float x = 6 / 4;int y = 6 / 4;printf("%f\n", x); // 输出 1.000000printf("%d\n", y); // 输出 1return 0;
}

我们可以看到,虽然变量x的类型是 float(浮点型),但是6 / 4得到的结果1.0,而不是1.5.原因就在于C语言里面的都是整数除法,只会返回整数部分,舍弃小数部分。
那如果想得到浮点型的运算结果应该怎么办呢?我们上面说到如果两端都是整数会执行整数除法,所以我们只需要将两端的操作数变成浮点型就可以得到浮点型的结果。
两个运算数必须至少有一个浮点数

#include <stdio.h>
int main()
{float x = 6.0 / 4;int y = 6 / 4;printf("%f\n", x); // 输出 1.500000printf("%d\n", y); // 输出 1return 0;
}

把6换成 6.0或者把 4换成4.0都可以得到想要的结果。
在看一个例子:

int main()
{int x = 5;x = (x / 10) * 100;printf("%d", x);return 0;
}

输出结果:
在这里插入图片描述
稍微一看可能觉得输出的结果是50,可是结果却是0,是因为因为/的两端都是整数所以进行的是整数除法只保留小数点以前的数,所以 0*100 = 0,而我们想得到50只需要把10改成10.0。
那么可不可以把100改成100.0呢?
结果:
在这里插入图片描述
我们可以看到结果依旧是0,这是为什么呢?在这里我们就要考虑到一个算数优先级的问题,在这个式子中是从左到右进行计算,所以先算除法,但是除法两端的操作数都是整数所以得到的是0导致最后的结果也是0。所以我们应该注意将合适的数字改成浮点型。

1.4 %

运算符%表示进行模运算,即返回两个整数相除的余数,这个运算符只能用于整数,不能用用于浮点数。

include <stdio.h>
int main()
{int x = 8 % 6; // 2return 0;
}

负数求模的规则是根据第一个运算数的符号来确定结果的正负。

#include<stdio.h>
int main()
{printf("%d\n", 12 % 7);      // 5printf("%d\n", -12 % -7);    // -5printf("%d\n", -12 % 7);     // -5printf("%d\n", 12 % -7);     // 5return 0;
}

2 赋值操作符 :=

在变量创建的时候给一个初始值叫做初始化,在变量创建好后,在给一个值叫做赋值
赋值操作符 ‘ = ’是一个可以随时给变量赋值的操作符

	int a = 1;//初始化a = 2;//赋值,这⾥使⽤的就是赋值操作符

2.1 复合赋值符

在写代码的时候我们可能用到对一个变量进行自增自减的操作

#include<stdio.h>
int main()
{int a = 1;a = a + 1;a = a - 1;return 0;
}

在C语言中提供了更加方便的写法:

#include<stdio.h>
int main()
{int a = 1;a += 1;a -= 1;return 0;
}

C语⾔中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:

	//1  +=     -=  //2  *=     /=     %=//下面的以后会解释//3 >>=    <<=//4 &=     |=      ^=

3 单目操作符

前⾯介绍的操作符都是双⽬操作符,有2个操作数的。C语⾔中还有⼀些操作符只有⼀个操作数,被称
为单⽬操作符。 ++、–、+(正)、-(负) 就是单⽬操作符的。

3.1 ++和- -

++是⼀种⾃增的操作符,⼜分为前置++和后置++,–是⼀种⾃减的操作符,也分为前置- -和后置- -.

a++(后置加加) ++a(前置加加) a--(后置减减) --a(前置减减)

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

大家可以猜一下输出的结果
代码结果:
在这里插入图片描述
我们可以看到a的值是11,b的值是10。这是为什么呢?
首先我们要先了解前置和后置的区别,顾名思义前置就是在前面,先进行操作,后置就是在后面,后进行操作。我们这里用到的是后置。所以是先使用后操作,先使用a = 10的值赋给b在进行自增操作a ++ = a +1。
--的操作方法和逻辑与++相同

4 强制类型转换

操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:

在这里插入图片描述
代码:

	int a = 3.14//因为a是整形 3.14是浮点型,类型不一致有的编译器会报错

为了避免这样的错误我们可以进行强制类型转换

	int a =int3.14//将3.14强制转换成整数类型,这样只会保留整数部分

注意:除非特殊情况下,尽量不要使用

5 printf 和 scanf

5.1 printf

5.1.1 基本用法

printf()的作用是将参数文本输出到屏幕上。其中的f代表format(格式化),表示可以定制输出文本的格式。
printf() 是在标准库的头⽂件stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这个头⽂件。

#include<stdio.h>
int main()
{printf("Hello C");return 0;
}

这样就会在屏幕上输出一行 “ Hello C ”,并且光标会到末尾,如果想让光标到下一行则可以在末尾加上 \n

5.1.2 占位符

printf()可以在输出文本中指定占位符。
而所谓的“ 占位符 ”,就是这个位置可以被代替。

#include <stdio.h>
int main()
{printf("There are %d peoples\n", 2);return 0;
}

上⾯⽰例中, There are %d peoples\n 是输出⽂本,⾥⾯的 %d 就是占位符,表⽰这个位置要⽤其他值来替换。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型, %d 表⽰这⾥代⼊的值必须是⼀个整数。
printf() 的第⼆个参数就是替换占位符的值,上⾯的例⼦是整数 2 替换 %d 。执⾏后的输出结果就是 There are 2 peoples 。

输出文本里面可以出现多个占位符:

printf("%s says you are %d years old","nan",18);

上面的示例中我们可以看到有两个占位符 %d%s,其中%s就是用来打印字符串的占位符,对应的参数分别是 %s 对应 “nan” %d 对应 18 他们的顺序不能改变,如果一个语句中的占位符多于参数个数,那么就会出错进而输出内存中的任意值。

5.1.3 占位符列举

printf() 的占位符有许多种类,与 C 语⾔的数据类型相对应。下⾯按照字⺟顺序,列出常⽤的占位符,⽅便查找,具体含义在后⾯章节介绍。

  • %a : ⼗六进制浮点数,字⺟输出为小写。
  • %A : ⼗六进制浮点数,字⺟输出为⼤写。
  • %c : 字符
  • %d : 十进制整数
  • %e : 使⽤科学计数法的浮点数,指数部分的 e 为小写。
  • %E : 使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
  • %i : 整数,基本等同于 %d 。
  • %f : ⼩数(包含 float 类型和 double 类型)。
  • %g : 6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e
    为⼩写
  • %G : 等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
  • %hd : ⼗进制 short int 类型。
  • %ho : ⼋进制 short int 类型。
  • %hx : ⼗六进制 short int 类型。
  • %hu : unsigned short int 类型。
  • %ld : ⼗进制 long int 类型。
  • %lo : ⼋进制 long int 类型。
  • %lx : ⼗六进制 long int 类型。
  • %lu : unsigned long int 类型。
  • %lld : ⼗进制 long long int 类型。
  • %llo : ⼋进制 long long int 类型。
  • %llx : ⼗六进制 long long int 类型。
  • %llu : unsigned long long int 类型。
  • %Le : 科学计数法表⽰的 long double 类型浮点数。
  • %Lf : long double 类型浮点数。
  • %n : 已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
  • %o : 八进制整数
  • %p : 指针
  • %s : 字符串
  • %u : 无符号整数
  • %x : 十六进制整数
  • %zd : size_t 类型
  • %% : 打印一个百分号

5.1.4 输出格式

printf() 可以定制占位符的输出格式。

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

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

相关文章

【高级篇】MySQL集群与分布式:构建弹性和高效的数据服务(十四)

引言 在探讨了《分区与分片》策略后,我们已经学会了如何在单一数据库层面有效管理大量数据和提升查询效率。本章,我们将踏上更高层次的探索之旅,深入MySQL集群与分布式技术的广阔领域。这些技术不仅能够横向扩展系统的处理能力和存储容量,还能显著增强数据服务的可靠性和响…

【教学类65-05】20240627秘密花园涂色书(中四班练习)

背景需求: 打印以下几款秘密花园样式&#xff08;每款10份&#xff09;给中四班孩子玩一下&#xff0c;看看效果 【教学类65-01】20240622秘密花园涂色书01&#xff08;通义万相&#xff09;&#xff08;A4横版2张&#xff0c;一大3小 38张纸76份&#xff09;-CSDN博客文章浏览…

后端加前端Echarts画图示例全流程(折线图,饼图,柱状图)

本文将带领读者通过一个完整的Echarts画图示例项目&#xff0c;演示如何结合后端技术&#xff08;使用Spring Boot框架&#xff09;和前端技术&#xff08;使用Vue.js或React框架&#xff09;来实现数据可视化。我们将实现折线图、饼图和柱状图三种常见的数据展示方式&#xff…

黄子韬直播风暴揭秘经济人风波

黄子韬直播风暴&#xff1a;揭秘经纪人风波&#xff0c;真诚道歉小马丁6月27日晚&#xff0c;娱乐圈再次掀起波澜&#xff0c;黄子韬在直播中罕见地谈及了去年那场业界的经纪人风波&#xff0c;并意外地再次回应了与DJ小马丁的演出争议&#xff0c;这无疑让广大粉丝和网友们热血…

葡萄串目标检测YoloV8——从Pytorch模型训练到C++部署

文章目录 软硬件准备数据准备数据处理脚本模型训练模型部署数据分享软硬件准备 训练端 PytorchultralyticsNvidia 3080Ti部署端 fastdeployonnxruntime数据准备 用labelimg进行数据标注 数据处理脚本 xml2yolo import os import glob import xml.etree.ElementTree as ETxm…

黑龙江等保测评视角下的物联网安全策略探索

引言随着物联网技术在黑龙江省各行各业的广泛应用&#xff0c;信息安全问题日益凸显。等保测评作为网络安全保障体系的重要组成部分&#xff0c;对于物联网环境下的数据保护、设备安全及隐私防护具有重要意义。 本文旨在探讨在等保测评框架下&#xff0c;如何构建有效的物联网…

SpringBoot-SpringBoot中文文档

简介 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同时支持基于J…

linux 常用的命令、文件路径、其他工具或软件包

命令 sudo apt dist-upgrade 解决显示 暂不升级、未被升级dd if/dev/zero of./rootfs.img bs1G count6 制作一个 6G 的空白镜像。bs 是块字节数&#xff0c;count 是 bs 的个数。dd if./rootfs.img of/dev/sdc2 bs512 烧录 rootfs.img 镜像到 /dev/sdc2。bs 是 512 个字节&…

【51单片机入门】矩阵键盘

文章目录 前言矩阵键盘介绍与检测原理原理图代码讲解总结 前言 在嵌入式系统设计中&#xff0c;键盘输入是一种常见的人机交互方式。其中&#xff0c;矩阵键盘因其简单、方便和易于扩展的特性&#xff0c;被广泛应用于各种设备中。本文将介绍如何使用51单片机来实现矩阵键盘的…

U盘/移动硬盘安装插拔式Ubuntu系统,并将Docker目录挂载到NTFS硬盘

Windows10的WSL2的确给开发人员带来了很多方便&#xff0c;但是仍然有很多缺点。比如&#xff1a;太占系统内存&#xff1b;有些软件无法在WSL2中编译成功&#xff1b;相当于虚拟机&#xff0c;性能不如原装系统。 装双系统&#xff0c;相信大家都不陌生&#xff0c;但它会占用…

若依 ruoyi 分离版 vue 简单的行内编辑实现

需要实现的效果&#xff1a;双击文本 - 修改文本 - 保存修改。 原码&#xff1a;仅文本显示文字内容 <el-table-column label"商品" align"center" prop"goodsName" width"200" v-if"columns[1].visible" /> 实现…

气膜仓库的优势与应用—轻空间

随着现代物流和存储需求的不断增长&#xff0c;传统仓库的建设和运营成本日益增加&#xff0c;企业需要寻找更加灵活、高效和经济的解决方案。在这种背景下&#xff0c;气膜仓库作为一种新型仓储形式&#xff0c;以其独特的优势和广泛的应用前景&#xff0c;逐渐受到市场的青睐…

什么是封装?为什么要封装?

什么是封装&#xff1f; 封装是计算机科学中的一个重要概念&#xff0c;尤其在面向对象编程&#xff08;OOP&#xff09;中占据核心地位。封装主要指的是将数据&#xff08;属性&#xff09;和对这些数据的操作&#xff08;方法&#xff09;组合在一个单元中&#xff08;我们称…

打开数据结构的大门——顺序表详解

前言&#xff1a; 小编在近日刚开始学顺序表&#xff0c;为了巩固学习&#xff0c;小编先写一篇关于顺序表的文章来加强记忆&#xff0c;写完这一篇我将继续书写C语言相关的文章&#xff0c;那么废话不多说&#xff0c;下面小编将打开数据结构的大门&#xff01;顺序表来喽&…

Android中常见的线程池

日常开发中我们常常使用到线程池&#xff0c;其能有效管理线程资源&#xff0c;避免过多线程导致系统资源浪费、又能复用线程资源&#xff0c;避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类&#xff0c;本文主要记录该类相关的知识点。 线程池的六…

详述Python环境下配置AI大模型Qwen-72B的步骤

随着人工智能技术的发展&#xff0c;大规模预训练模型如Qwen-72B等逐渐成为研究和应用的重点。本篇博客旨在提供一份详细的指南&#xff0c;帮助Python开发者们在自己的环境中顺利配置并使用Qwen-72B大模型。 请注意&#xff1a;由于Qwen-72B这一模型目前并未公开存在&#xf…

视频监控业务平台LntonCVS国标视频综合管理平台功能及技术优势

随着安防行业的快速进步&#xff0c;传统的视频监控平台正在与先进的技术和互联网技术融合&#xff0c;包括5G通信、GIS、大数据、云计算、边缘计算、AI识别、智能分析和视频直播等。这些技术的整合形成了综合性视频监控管理平台&#xff0c;具备集中管理、多级联网共享、互联互…

【面试系列】网络工程师 高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

如何深刻理解Redis的底层原理?Redis的运行机制是什么?如何优化Redis提供更高效服务

要深刻理解Redis的底层原理和运行机制&#xff0c;可以从以下几个方面入手&#xff1a; 1. 单线程模型&#xff1a;Redis采用单线程模型&#xff0c;所有的操作都在同一个线程中执行。这种设计可以减少线程切换带来的开销&#xff0c;从而提高性能 。 2. 虽然Redis是单线程的&…

Python日志库logging

日志级别 级别对应的数值: NOTSET&#xff08;0&#xff09;、DEBUG&#xff08;10&#xff09;、INFO&#xff08;20&#xff09;、WARNING&#xff08;30&#xff09;、ERROR&#xff08;40&#xff09;、CRITICAL&#xff08;50&#xff09; INFO、WARNING、ERROR、CRITICA…