当前位置: 首页 > news >正文

C语言——运算符及表达式

C语言——运算符及表达式

  • 运算符
    • 运算符的分类
    • ++(自增运算符)、--(自减运算符)
    • 赋值运算符
    • 逗号运算符(顺序求值运算符)
  • 表达式

运算符

运算符的分类

C语言的运算符范围很宽,除了控制语句和输入输出以外的几乎所有的基本操作都可以作为运算符处理。通过查阅课本可知运算符的分为以下13类:
在这里插入图片描述
我下面主要要讲述的是算术运算符、赋值运算符、以及逗号运算符;

算数运算符
算术运算符总共有+(加法运算符) 、-(减法运算符) 、*(乘法运算符) 、/(出发运算符) 、%(求余运算符) 五种,要想了解算数运算符及运算符的使用必须先要了解运算符的优先级和结合性;
那么什么时候会用到运算符的的优先级呢?
就是在不同优先级的运算符混合在一起使用的时候高优先级的会先结合;
结合性,所谓结合性就是运算符的结合方向,不同的运算符都有着不同的结合方向,当同一优先级的运算符混合时运算符会按照结合性结合。
运算符的优先级和结合性如下表所示:
在这里插入图片描述
算数运算符的用法和数学上了类似,需要注意的是求余运算符(%):
求余运算的规则
1、求余运算中运算数不能是小数,必须是整数;
2、除数不能为零;
3、结果的符号取决于左操作数;
那何为左操作数呢?
左操作数也就是左值,通俗来说就是能够放在表达式左边的变量,左值的定义是可定位的变量也就是可以在内存空间中找到相应的内存空间。
和左值相反的是右值,右值是不可定位的也就是在内存空间中找不到相应的空间;
常见求余运算符的用法:%2用于求偶数和奇数;%N可以取出在0~N - 1范围内的数,等等;
在产生一定范围内的随机数时也可以用到求余运算符,例如:

#include <stdio.h>int main(void)
{int i = 0;srand(time(NULL));for(i = 0; i < 10; ++i){printf("%d\n", rand() % 100);}return 0;
}

rand()产生的其实是伪随机数也就是产生的第一组数据是随机的如果再将程序执行一遍时打印的数字和上次打印的数据是一样的,原因是rand()起初含有一个默认的种子如果不改变种子输出的就是一样的数据,而srand()的作用就是给rand()种下一个种子把time(NULL)(返回值是秒的数值)作为参数传进srand(),这样以变化的时间来作为种子就不断的产生不是每次全部都一样的随机数了。

++(自增运算符)、–(自减运算符)

++自增运算符的常见用法:++i、i++;
i++先用后加前提是i++要参与到别的运算中才会起作用;
i++的值在内存中是这样存储的:
假设i在内存中占四个字节,i本身的值占用上面的四个字节并且会在其下面开辟出一块临时的空间用于存放表达式也就是i++的值;
在这里插入图片描述

++i也就是常说先加后用,这个先加后用的前提是++i要参与到别的运算中才会起作用;
和i++不同的是++i本身的值和表达式的值都是存放在同一块空间内的,所以说++i的效率更高,因为++i不用开辟额外的空间。
–自减运算符和自增运算符同理;

自增运算符问题:

#include <stdio.h>int main()
{int i = 3;printf("%d\n", i+++++i);return 0;
}

问输出结果是什么?
这里程序会报错,原因是C语言编译器在处理时会从左往右逐个扫描,将字符尽可能多的结合成C语言运算符,所以遇到第一个+时没有运算符结合,遇到第二个+和第一个+结合成++,遇到第三个+无法和++结合,遇到第四个+和第三个+结合成++,遇到第五个+无法和++结合自己作为单个运算符所以i+++++i表达使得结合性是这样的最后(((i++)++)+i),因为i++是一个表达式,表达式为右值( )++缺左值所以程序会报错。

#include <stdio.h>int main(void)
{int i = 0;printf("%d %d\n", i, i++);return 0;
}

在实际的应用中是不建议这样使用的,因为在多数系统中的函数传参顺序是从右往左的而且i++先用后加到底什么时候加没有统一的规定。推荐用法如下:

#include <stdio.h>int main()
{int n = i;int m = i++;printf("%d %d\n", n, m);return 0;
}

赋值运算符

赋值运算符常见用法:

int a = 0int a = b = c = d = 0;

当只有赋值运算符时只用考虑结合性,即从右往左。
不同类型间的赋值:
高精度 = 低精度例如float、double赋值给int类型这样会导致精度丢失,反之将低精度赋值给高精度类型比如把int赋值给float、double类型会发生精度提升,所以在进行赋值运算时要看清楚数据类型否则输出结果可能会和预想结果哦不一致。
整型赋值规则:
int => short
long => int
short => char
长类型=>短类型 //高位截断

int a = 0x12345678;
short b = a;
printf("%#x\n", b);

长类型赋值给短类型 ,会发生高位截断,输出结果是0x5678;
短类型=>长类型
无符号短类型 =>长类型 //高位补0

short a = 0x1234;
int b = a;
printf("%#x\n", b);

无符号短类型 赋值给长类型高位补0,输出结果为0x1234;

有符号短类型 =>长类型 //符号位扩展 (高位补符号位)

short a = 0x8234;
int b = a;
printf("%#x\n", b);

符号短类型赋值给长类型符号位会扩展 即高位补符号位,输出结果为0xffff8234。

逗号运算符(顺序求值运算符)

语法:
表达式1,表达式2,…,…,…
逗号表达式整个表达式的值是最后一个表达式的值,比如:

int a = 10;
int b = (1 + 2, a++, 3 + 4);

b的值就是3 + 4这个表达式的结果即7;

表达式

表达式就是由运算符和运算数构成字符序列且表达式都是有值的和数据类型的 。
讲到表达式需要注意的是数据类型的转换特别是隐式类型的转换,
在这里插入图片描述
横向的箭头表示必定的转换字符型(char)和短整型(short)在运算时必须先转换为整型(int),float型数据必须先转换为double型的数据,这样做的目的是提高运算精度。
纵向的箭头表示的是当运算对象为不同数据类型时的转换方向,例如int和double的数据类型进行运算时需要将int转换为double类型。
需要注意的时箭头方向只表示数据类型的高低由低往高转,不是表示int先转换为unsigned int 在转换为long再转换为double。

相关文章:

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类&#xff08;自增运算符&#xff09;、--&#xff08;自减运算符&#xff09;赋值运算符逗号运算符&#xff08;顺序求值运算符&#xff09; 表达式 运算符 运算符的分类 C语言的运算符范围很宽&#xff0c;除了控制语句和输入输出…...

Python面试宝典第23题:分发糖果

题目 n 个孩子站成一排&#xff0c;给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求&#xff0c;给这些孩子分发糖果。 &#xff08;1&#xff09;每个孩子至少分配到 1 个糖果。 &#xff08;2&#xff09;相邻两个孩子评分更高的孩子会获得更多的糖果。 请…...

Java与模式及其应用场景知识点分享(电子版)

前言 Java 编程语言自1995年问世以来&#xff0c;其成功好像任何编程语言都无法媲美。生逢其时(互联网的兴起)固然是一方面的原因&#xff0c;而Java吸收总结了前人的经验教训&#xff0c;反映了最新技术(the state ofthe art)&#xff0c;对其受到欢迎和采用&#xff0c;恐怕…...

软考高级第四版备考--第36天(审计内容)

IT内部控制审计&#xff1a;IT内部控制审计主要包括组织层面IT控制审计、IT一般控制审计及应用控制审计 IT专项审计&#xff1a;IT专项审计主要包括信息系统生命周期审计、信息系统开发过程审计、信息系统运行维护审计、网络与信息安全审计、信息系统项目审计、数据审计...

文件IO相关作业

1> 使用文件IO完成&#xff0c;将源文件中的所有内容进行加密&#xff08;大写转小写、小写转大写&#xff09;后写入目标文件中 源文件内容不变 #include<myhead.h>int main(int argc, const char *argv[]) {//判断传入的是否是两个文件if(argc!3){write(2,"inp…...

vue3 watch监听 父子组件通信

目录 01 watch监听方式 02 父子组件的通信 01 watch监听方式 1.watch(被监听的变量,(新值,旧值)>{ }) 默认直接就是深层监听 如果想要配置深度监听和默认触发 需要在第三个参数定义options对象 2.watch(被监听的变量,()>{},{ deep:true, immediate:true 项目打开后就执…...

【信创】adduser与useradd的区别 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;【信创】adduser与useradd的区别 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在信创终端操作系统上adduser和useradd命令区别的文章。adduser和useradd都是用于在Linux系统上添加用户的命令&#xff0c;但它们…...

微软Win11 24H2最新可选更新补丁26100.1301来袭!

系统之家于7月31日发出最新报道&#xff0c;微软针对Win11 24H2用户推出七月最新的可选更新KB5040529&#xff0c;本次更新为开始菜单引入了全新的账号管理器&#xff0c;也改进了任务栏上的小组件图标。接下来跟随系统之家小编来看看本次更新的详细内容吧&#xff01;【推荐下…...

层次特征的尺度艺术:sklearn中的缩放技术

层次特征的尺度艺术&#xff1a;sklearn中的缩放技术 在机器学习中&#xff0c;特征缩放&#xff08;Feature Scaling&#xff09;是数据预处理的重要步骤&#xff0c;尤其对于基于距离的算法&#xff0c;如K-近邻&#xff08;KNN&#xff09;和支持向量机&#xff08;SVM&…...

Chapter 21 深入理解JSON

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、JSON数据格式1. 什么是JSON&#xff1f;2. JSON数据的格式 二、JSON格式数据转化三、格式化JSON数据的在线工具 前言 在当今数据驱动的世界中&#xff0c;JSON&…...

【C++高阶数据结构】红黑树:全面剖析与深度学习

目录 &#x1f680; 前言&#xff1a;红黑树与AVL树的比较一&#xff1a; &#x1f525; 红黑树的概念二&#xff1a; &#x1f525; 红黑树的性质 三&#xff1a; &#x1f525; 红黑树节点的定义和结构&#x1f680; 3.1 基本元素&#x1f680; 3.2 节点颜色&#x1f680; 3.…...

前端基于 axios 实现批量任务调度管理器 demo

一、背景介绍 这是一个基于 axios 实现的批量任务调度管理器的 demo。它使用了axios、promise 等多种技术和原理来实现批量处理多个异步请求&#xff0c;并确保所有请求都能正确处理并报告其状态。 假设有一个场景&#xff1a;有一个任务列表&#xff0c;有单个任务的处理功能…...

Docker容器下面home assistant忘记账号密码怎么重置?

环境&#xff1a; docker ha 问题描述&#xff1a; Docker容器下面home assistant忘记账号密码怎么重置&#xff1f; 解决方案&#xff1a; 你可以按照以下步骤来找回或重置密码&#xff1a; 方法一 (未解决) 停止并删除当前的Home Assistant容器&#xff08;确保你已经保…...

CTF-NSSCTF[GKCTF 2021]

[GKCTF 2021]easycms 考察&#xff1a; 用扫描工具扫描目录&#xff0c;扫描到后台登录界面/admin.php 题目提示了密码是五位弱口令&#xff0c;试了试弱口令admin和12345直接成功了 任意文件下载 点击设计-->主题然后随便选择一个主题&#xff0c;点击自定义&#xff0…...

MSA+抑郁症模型总结(一)(论文复现)

MSA抑郁症模型总结&#xff08;一&#xff09;&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 MSA抑郁症模型总结&#xff08;一&#xff09;&#xff08;论文复现&#xff09;情感分析在多场景的应用一、概述二、论文地址三、研究背景四…...

STM32智能农业灌溉系统教程

目录 引言环境准备智能农业灌溉系统基础代码实现&#xff1a;实现智能农业灌溉系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;农业监测与优化问题解决方案与优化收尾与总结 1. 引言 智能农业灌溉系统通…...

MySQL存储引擎和

MySQL存储引擎 在数据库中保存的是一张张有着千丝万缕关系的表&#xff0c;所以表设计的好坏&#xff0c;将直接影响着整个数据库。而在设计表的时候&#xff0c;最关注的一个问题是使用什么存储引擎。MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种…...

Eclipse 主网向开发者开放

摘要&#xff1a;Eclipse 基金会宣布&#xff0c;Eclipse 主网已经向开发者开放。在接下来几周的时间里&#xff0c;Eclipse 将邀请开发者在主网上部署项目&#xff0c;并参加黑客马拉松活动——“Total Eclipse Challenge”。 Eclipse 是首个基于以太坊的 SVM Layer2 方案&am…...

国内NAT服务器docker方式搭建rustdesk服务

前言 如果遇到10054,就不要设置id服务器!!! 由于遇到大带宽,但是又贵,所以就NAT的啦,但是只有ipv4共享和一个ipv6,带宽50MB(活动免费会升130MB~) https://bigchick.xyz/aff.php?aff322 月付-5 循环 &#xff1a;CM-CQ-Monthly-5 年付-60循环&#xff1a;CM-CQ-Annually-60官方…...

锅总浅析链路追踪技术

链路追踪是什么&#xff1f;常用的链路追踪工具有哪些&#xff1f;它们的异同、架构、工作流程及关键指标有哪些&#xff1f;希望读完本文能帮您解答这些疑惑&#xff01; 一、链路追踪简介 链路追踪技术&#xff08;Distributed Tracing&#xff09;是一种用于监控和分析分布…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...