深入全面概括C语言的运算符

目录

二.算术运算符

三.自增自减运算符

四.赋值运算符

五.关系运算符

六.逻辑运算符

七.三元运算符

九.运算符的优先级


一.前言

        c语言的运算符可以分为六种,分别是:1.算术运算符;2.自增自减运算符;3.赋值运算符;4.关系运算符;5.逻辑运算符;6.三元运算符。

        下面我们来深入学习了解它们。

二.算术运算符

        算术运算符里面主要包括加减乘除以及取余运算。对于加减乘除,想必大家早就不陌生了。但在c语言里面值得注意的是在进行算术运算的时候,所得的结果还需要考虑参与运算数据的数据类型。我在这里列举出来四种:

1)两个整数计算,得到的结果一定是整数。

2)两个小数计算,得到的结果一定是小数。

3)整数和小数计算,得到的结果也一定是小数。

4)这里两个小数直接参与计算,结果是有可能不精确的。所以不建议使用小数进行运算。

如下所示:

#include<stdio.h>
int main(){
//整数与整数的计算
printf("%d\n", 2 + 4);
//整数与小数的运算
printf("%lf\n", 3 * 6.0);//小数与小数直接运算,结果可能不准确
printf("%lf\n", 3.33333333333 + 6.666666666666);return 0;
}

分别对上述情况展开运算,得到的结果如下:

 

可以看到,第三个结果是两个小数计算后的结果,数据发生了改变,并没有输出正确的结果。

除此之外,我们在使用运算符进行计算的时候,还可能会遇到当我们参与运算的两个数据的数据类型不一致的时候,就会出现隐式转换的情况,或者需要强制转换的情况。

这里我来介绍下什么是隐式转换:隐式转换就是把一个取值范围小的数据类型转换为取值范围更大的数据类型。其中特殊的有short和char类型首先会提升为int类型,再进行运算。  

这里涉及取值范围的问题,我们就可以了解下几种数据类型的取值范围排序了: 

char<short<int<long<long long<float<double. 

下面我们来看一个案例:

int i = 1;
double s = 3.2;
printf("%zu", sizeof(i * s));

输出的结果如下:

 

这里我们发现,i的数据类型是int类型,而我们的s数据类型是double,根据取值范围排序,我们就知道这里会进行隐式转换,并且最后的结果会转换double类型,所以在使用sizeof()来进行字节大小判断的时候,结果才会是8个字节,而不是4个字节。

而我们的强制转换则恰恰相反,是把一个取值范围大的赋值给取值范围小的。它的格式如下:

目标数据类型 变量名=(目标数据类型)被强转的数据。

但一般我们不推荐使用,因为会有可能造成数据的丢失。

三.自增自减运算符

        关于这个,我们只需要了解下面的原则即可:

       首先是自增自减的前缀优先级要高于后缀的优先级

然后前缀会统一自增自减,再把结果拿来用。而后缀则是会统一先用,等整个表达式中的变量用完了,再进行自增自减操作。

下面我们来看一个案例:

int a = 10;
//前缀统一先加,再把结果相加
int k1 = ++a + ++a;		//12+12=24  a=12
//后缀统一先用,等整个表达式中的变量用完后,再进行自增操作
int k2 = a++ + a++;		//12+12=24  a=14int k3 = ++a + a++;		//15+15=30 a=16int k4 = a++ + ++a;    //16+18=34  a=18
printf("%d\n", k1);
printf("%d\n", k2);
printf("%d\n", k3);
printf("%d\n", k4);

通过程序我们可以发现,k1表达式中都是前缀自增,所以我们先进行自加,两个++a,a的值也就从10变为了12,所以最后k1=12+12=24。k2表达式则都是后缀自增,因此我们先用,也就是k2=12+12=24,但是这里a的值也变为了14。 而k3表达式有前缀也有后缀,我们遵循前缀优于后缀的原则,所以先进行++a,所以a=15;后缀则是先用,因此k3=15+15,在进行完计算后,a的值还会进行自加,也就是变为了16.同理,k4=16+18=34.

综上所述,所以最后的结果也就是:

四.赋值运算符

        简而言之,就是在赋值的操作上,简化其代码。

例如,a=a+b,通过使用加后赋值的方法,可以简化为a+=b,二者是相互等同的。

五.关系运算符

       关系运算符是用来判断等式两边数据大小,相等关系的。它的运算结果只有两者情况,一种要是关系成立,则会返回结果1。否则会返回结果0。

例如:

int a=12;
int b=30;
printf("%d\n",a>b);

a>b自然是不成立的,因此最后的结果也就是0

六.逻辑运算符

        逻辑运算符主要有三种:1.&&是与(而且),只有当两边都为真的时候,结果才是真。

2.|| 是或(或者),只有当两边都为假的时候,结果才为假。

3.! 是非(取反),起到一个取反的作用。

值得注意的是,逻辑运算符一般具有短路的效果:也就是当左边的表达式能够确定整个表达式的结果的时候,右边表达式就不再参与运算。

例如 我们来看下面这段代码:

int a = 1;
int b = 2;
if (a < b && b + 1) {printf("%d\n", a);printf("%d\n", b);
}

运行结果为:

 

因此我们可以看到&&左边的表达式是a<b,是成立的,因此右边表达式也就不再执行,所以b的值还是2,并没有加1。

然后我们来看另外一段相似的代码:

int a = 1;
int b = 2;
if (a > b || b++) {printf("%d\n", a);printf("%d\n", b);
}

运行的结果是:

 

 这里我们可以看到,b的值发生了改变,原因就是因为||左边的表达式不成立,因此会执行右边表达式,也就是b++。

七.三元运算符

        三元运算符的格式为:关系表达式?表达式1:表达式2

也就是首先会进行关系表达式的判断,要是结果为真,则执行表达式1,否则执行表达式2。

八.逗号运算符

        

关于逗号运算符,我们只需要知道,它的优先级最低,可以对变量的各个操作放在同一行代码当中实现,如上图所示。

九.运算符的优先级

        我们在学习了所以运算符之后,我们来了解一下各个运算符的优先级。在这里我已经帮大家做成了一个表格,如下,下次只需要参照这个表格就可以了。

 

        

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

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

相关文章

uniapp转小程序,小程序转uniapp方法

&#x1f935; 作者&#xff1a;coderYYY &#x1f9d1; 个人简介&#xff1a;前端程序媛&#xff0c;目前主攻web前端&#xff0c;后端辅助&#xff0c;其他技术知识也会偶尔分享&#x1f340;欢迎和我一起交流&#xff01;&#x1f680;&#xff08;评论和私信一般会回&#…

python-字符金字塔(赛氪OJ)

[题目描述] 请打印输出一个字符金字塔&#xff0c;字符金字塔的特征请参考样例。输入格式&#xff1a; 输入一个字母&#xff0c;保证是大写。输出格式&#xff1a; 输出一个字母金字塔&#xff0c;输出样式见样例。样例输入 C样例输出 A ABA …

【ffmpeg命令基础】过滤处理

文章目录 前言过滤处理的介绍两种过滤类型简单滤波图简单滤波图是什么简单滤波示例 复杂滤波图复杂滤波是什么区别示例 总结 前言 FFmpeg是一款功能强大的开源音视频处理工具&#xff0c;广泛应用于音视频的采集、编解码、转码、流化、过滤和播放等领域。1本文将重点介绍FFmpe…

Python、Rust与AI的未来展望

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

FastAdmin: 一款基于ThinkPHP+Bootstrap的极速后台开发框架(Gitee最有价值开源项目)

欢迎加入我们前端技术学习交流群&#xff0c;关注“前端组件开发”公众号&#xff0c;私信可申请入群 摘要&#xff1a; 随着Web技术的快速发展&#xff0c;后台管理系统的开发效率与灵活性成为了项目成功的关键。FastAdmin作为一款基于ThinkPHP和Bootstrap的开源后台框架&…

Langchain[4]:Langchain 0.2革命性突破:结合工具调用与结构化数据处理、@Chain修饰符使用,解决LLM输出难题,提升AI效能

Langchain[4]:Langchain 0.2革命性突破:结合工具调用与结构化数据处理,解决LLM输出难题,提升AI效能 1.工具调用 大型语言模型 (LLM) 可以通过工具调用功能与外部数据源交互。工具调用是一种强大的技术,允许开发人员构建复杂的应用程序,这些应用程序可以利用 LLM 访问、交…

C++ | Leetcode C++题解之第239题滑动窗口最大值

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n nums.size();vector<int> prefixMax(n), suffixMax(n);for (int i 0; i < n; i) {if (i % k 0) {prefixMax[i] num…

简单实用的企业舆情安全解决方案

前言&#xff1a;企业舆情安全重要吗&#xff1f;其实很重要&#xff0c;尤其面对负面新闻&#xff0c;主动处理和应对&#xff0c;可以掌握主动权&#xff0c;避免股价下跌等&#xff0c;那么如何做使用简单实用的企业舆情解决方案呢&#xff1f; 背景 好了&#xff0c;提取词…

CSS技巧专栏:一日一例 7 - 纯CSS实现炫光边框按钮特效

CSS技巧专栏&#xff1a;一日一例 7 - 纯CSS实现炫光边框按钮特效 本例效果图 案例分析 相信你可能已经在网络见过类似这样的流光的按钮&#xff0c;在羡慕别人做的按钮这么酷的时候&#xff0c;你有没有扒一下它的源代码的冲动&#xff1f;或者你当时有点冲动&#xff0c;却…

【PostgreSQL】PostgreSQL简史

博主介绍&#xff1a;✌全网粉丝20W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

基于python的百度资讯爬虫的设计与实现

研究背景 随着互联网和信息技术的飞速发展&#xff0c;网络已经成为人们获取信息的主要来源之一。特别是搜索引擎&#xff0c;作为信息检索的核心工具&#xff0c;极大地改变了人们获取信息的方式。其中&#xff0c;百度作为中国最受欢迎的搜索引擎之一&#xff0c;其新闻搜索…

leetcode简单题27 N.119 杨辉三角II rust描述

// 直接生成杨辉三角当前行 pub fn get_row(row_index: i32) -> Vec<i32> {let mut row vec![1; (row_index 1) as usize];for i in 1..row_index as usize {for j in (1..i).rev() {row[j] row[j] row[j - 1];}}row } // 空间优化的方法 pub fn get_row2(row_ind…

【QT】label适应图片(QImage)大小;图片适应label大小

目录 0.简介 1.详细代码 1&#xff09;label适应img大小 2&#xff09;img适应label大小 0.简介 一个小demo &#xff0c;想在QLabel中放一张QImage的图片&#xff0c;我有一张图片叫【bird.jpg】&#xff0c;是提前放在资源文件中的&#xff0c;直接显示在label上后&#…

【机器学习入门】拥抱人工智能,从机器学习开始

拥抱人工智能&#xff0c;从机器学习开始 目录&#xff1a; 1. 机器学习&#xff1a;一种实现人工智能的方法 2. 机器学习算法&#xff1a;是使计算机具有智能的关键 3. Anaconda&#xff1a;初学Python、入门机器学习的首选 4. 总结 转载链接&#xff1a; 文章-阿里云开发者社…

【LeetCode:试题 16.06. 最小差 + 双指针 + 防止整型溢出】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

ELK企业级日志分析

目 录 一、ELK简介 1.1 elasticsearch简介 1.2 logstash简介 1.3 kibana简介 1.4 ELK的好处 1.5 ELK的工作原理 二、部署ELK 2.1 部署elasticsearch(集群) 2.1.1 修改配置文件 2.1.2 修改系统参数 2.1.2.1 修改systemmd服务管理器 2.1.2.2 性能调优参数 2.1.2.3 …

Python编程工具PyCharm和Jupyter Notebook的使用差异

在编写Python程序时需要用到相应的编程工具&#xff0c;PyCharm和Jupyter Notebook是最常用2款软件。 PyCharm是很强大的综合编程软件&#xff0c;代码提示、代码自动补全、语法检验、文本彩色显示等对于新手来说实在太方便了&#xff0c;但在做数据分析时发现不太方便&#xf…

基于嵌入式Linux的高性能车载娱乐系统设计与实现 —— 融合Qt、FFmpeg和CAN总线技术

随着汽车智能化的发展&#xff0c;车载娱乐系统已成为现代汽车的标配。本文介绍了一个基于Linux的车载娱乐系统的设计与实现过程。该系统集成了音视频娱乐、导航、车辆信息显示等功能&#xff0c;旨在提供安全、便捷、丰富的驾驶体验。 1. 项目概述 随着汽车智能化的发展&…

postgresql删除用户

背景 **角色与用户**&#xff1a;在 PostgreSQL 中&#xff0c;用户和组的概念是通过“角色”来统一实现的。角色可以有登录权限&#xff08;在这种情况下&#xff0c;它们通常被称为“用户”&#xff09;&#xff0c;也可以没有&#xff08;在这种情况下&#xff0c;它们通常用…

解决VSCode自动识别文件编码

在VScode 的 设置界面 输入 autoGuess 关键字 &#xff0c;勾选启用即可自动识别&#xff01;&#xff01;&#xff01;