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

C语言——运算符

C用运算符表示算术运算。

C没有指数运算符,不过,C的标准数学库提供了一个pow()函数用于指数运算。

基本运算符

赋值运算符:=

变量名=变量值 从右到左

左值和变量名的区别:

变量名是一个标识符的名称,左值是一个可变的量。

变量可以是左值,也可以是右值,但是常量绝对不可以是一个左值。

其它赋值运算符:

下面的运算符用右侧的值,根据指定的操作更新左侧的变量:

+=  把右侧的值加到左侧的变量上

-=   从左侧的变量中减去右侧的值

*=  把左侧的变量乘以右侧的值

/=  把左侧的变量除以右侧的值

%=  左侧变量除以右侧值得到的余数

这些组合赋值运算符与普通赋值运算符的优先级相同,都比算术运算符的优先级低。

加法运算符:+

相加的值(运算对象)可以是变量,也可以是常量。

减法运算符:-

左侧数减去右侧数

+和-运算符都被称为二元运算符,即这些运算符需要两个运算对象才能完成操作

符号运算符:-和+

减号还可用于标明或改变一个值的代数符号,这样的负号被称为一元运算符,一元运算符只需要一个运算对象

乘法运算符:*

除法运算符:/

被除数/除数

整数除法和浮点数除法不同。浮点数除法的结果是浮点数,而整数除法的结果是整数。整数是没有小数部分的数。这使得5除以3很让人头痛,因为实际结果有小数部分。在C语言中,整数除法结果的小数部分被丢弃,这一过程被称为截断(truncation)。

注意,整数除法会截断计算结果的小数部分(丢弃整个小数部分),不会四舍五入结果。混合整数和浮点数计算的结果是浮点数。实际上,计算机不能真正用浮点数除以整数,编译器会把两个运算对象转换成相同的类型。

C99标准以前,C语言给语言的实现者留有一些空间,让他们来决定如何进行负数的整数除法。一种方法是,舍入过程采用小于或等于浮点数的最大整数。当然,对于3.8而言,处理后的3符合这一描述。但是-3.8 会怎样?该方法建议四舍五入为-4,因为-4 小于-3.8.但是,另一种舍入方法是直接丢弃小数部分。这种方法被称为“趋零截断”,即把-3.8转换成-3。在C99以前,不同的实现采用不同的方法。但是C99规定使用趋零截断。所以,应把-3.8转换成-3。

运算符优先级

乘法和除法的优先级比加法和减法高,所以先执行乘法和除法。如果两个运算符的优先级相同怎么办?如果它们处理同一个运算对象,则根据它们在语句中出现的顺序来执行。对大多数运算符而言,这种情况都是按从左到右的顺序进行(=运算符除外)。

表达式树可以用来表示求值的顺序

最先执行圆括号中的部分。圆括号内部按正常的规则执行。

正、负号是一元;加、减号是二元。

结合律只适用于共享同一运算对象的运算符。

其他运算符

sizeof运算符和size_t类型

sizeof运算符以字节为单位返回运算对象的大小(在C中,1字节定义为char类型占用的空间大小。过去,1字节通常是8位,但是一些字符集可能使用更大的字节)。运算对象可以是具体的数据对象(如,变量名)或类型。如果运算对象是类型(如,float),则必须用圆括号将其括起来。

C 语言规定,sizeof 返回 size_t 类型的值。这是一个无符号整数类型,但它不是新类型。

求模运算符:%

求模运算符(modulus operator)用于整数运算。求模运算符给出其左侧整数除以右侧整数的余数(remainder)。

求模运算符只能用于整数,不能用于浮点数。

作用:控制程序流

如果第1个运算对象是负数,那么求模的结果为负数;如果第1个运算对象是正数,那么求模的结果也是正数。

递增运算符:++

递增运算符(increment operator)执行简单的任务,将其运算对象递增1。该运算符以两种方式出现。第1种方式,++出现在其作用的变量前面,这是前缀模式;第2种方式,++出现在其作用的变量后面,这是后缀模式。两种模式的区别在于递增行为发生的时间不同。

如果n++是表达式的一部分,可将其视为“先使用n,再递增”;而++n则274表示“先递增n,再使用”。

把变量的递增过程放入while循环的条件中有什么好处?

1.使得程序更加简洁。

2.把控制循环的两个过程集中在一个地方。该循环的主要过程是判断是否继续循环,次要过程是改变待测试的元素。

3.生成的机器语言代码效率更高,因为它和实际的机器语言指令很相似。

如果使用前缀形式和后缀形式会对代码产生不同的影响,那么最为明智的是不要那样使用它们。

递减运算符:--

相等运算符:==

逗号运算符:,

逗号运算符把两个表达式连接成一个表达式,并保证最左边的表达式最先求值。逗号运算符通常在for循环头的表达式中用于包含更多的信息。整个逗号表达式的值是逗号右侧表达式的值。

优先级

递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高。因此,x*y++表示的是(x)*(y++),而不是(x+y)++。不过后者无效,因为递增和递减运算符只能影响一个变量(或者,更普遍地说,只能影响一个可修改的左值),而组合x*y本身不是可修改的左值。

PS:如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或递减运算符; 如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符。

逻辑运算符

逻辑运算符的运算对象通常是关系表达式。!运算符只需要一个运算对象,其他两个逻辑运算符都需要两个运算对象,左侧一个,右侧一个。

&& 与

|| 或

! 非

优先级

!运算符的优先级很高,比乘法运算符还高,与递增运算符的优先级相同,只比圆括号的优先级低。&&运算符的优先级比||运算符高,但是两者的优先级都比关系运算符低,比赋值运算符高。因此,表达式a >b && b > c ||b > d相当于((a > b) && (b > c)) || (b > d)。也就是说,b介于a和c之间,或者b大于d。

尽管对于该例没必要使用圆括号,但是许多程序员更喜欢使用带圆括号的第 2 种写法。这样做即使不记得逻辑运算符的优先级,表达式的含义也很清楚。

逻辑表达式

当且仅当expression1和expression2都为真,expression1 && expression2才为真。

如果 expression1 或 expression2 为真,expression1 || expression2 为真。

如果expression为假,!expression则为真,反之亦然。

求值顺序

逻辑表达式的求值顺序是从左往右。一旦发现有使整个表达式为假的因素,立即停止求值。

条件运算符:?:

C提供条件表达式作为表达if else语句的一种便捷方式,该表达式使用 ?: 条件运算符。该运算符分为两部分,需要 3 个运算对象。(带一个运算对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算,以此类推。)条件运算符是C语言中唯一的三元运算符。

格式:

expression1?expression2;expression3

如果 expression1 为真(非 0),那么整个条件表达式的值与 expression2的值相同;如果expression1为假(0),那么整个条件表达式的值与expression3的值相同。

if(expression1)

 expression2;

else

 expression3;

地址运算符:&

指针(pointer)是 C 语言最重要的(有时也是最复杂的)概念之一,用于储存变量的地址。前面使用的scanf()函数中就使用地址作为参数。概括地说,如果主调函数不使用return返回的值,则必须通过地址才能修改主调函数中的值。

元&运算符给出变量的存储地址。如果pooh是变量名,那么&pooh是变量的地址。可以把地址看作是变量在内存中的位置。

间接运算符(解引运算符):*

后跟一个指针名或地址时,*给出存储在指针指向地址上的值。

nurse=22;

ptr=&nurse; //指向nurse的指针

val=*ptr; //把ptr指向的地址上的值赋给val

相关文章:

C语言——运算符

C用运算符表示算术运算。 C没有指数运算符,不过,C的标准数学库提供了一个pow()函数用于指数运算。 基本运算符 赋值运算符: 变量名变量值 从右到左 左值和变量名的区别: 变量名是一个标识符的名称,左值是一个可变…...

MySQL数据库入门到精通8--进阶篇( MySQL管理)

7. MySQL管理 7.1 系统数据库 Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下: 7.2 常用工具 7.2.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 语法 : mysql [options] [database] 选…...

硬件基本功--MOS管

一、上下拉电阻Rgs的作用 Rgs:经验值,一般取10K左右。 1. 上电时给MOS管的栅极一个确定的电平,防止上电时GPIO为高阻态时,MOS管的栅极电平不确定,从而受到干扰。 2. 断电时,如果MOS管是导通的状态&#xff…...

xdebug3开启profile和trace

【xdebug开启profiler】 https://xdebug.org/docs/profiler http://www.xdebug.org.cn/docs/profiler 1、php.ini添加下面配置然后重启php容器: xdebug.modeprofile ;这个目录保存profile和trace文件 xdebug.output_dir /var/tmp/xdebugPHP日志提示报错&#xff1a…...

EfficientFormer:高效低延迟的Vision Transformers

我们都知道Transformers相对于CNN的架构效率并不高,这导致在一些边缘设备进行推理时延迟会很高,所以这次介绍的论文EfficientFormer号称在准确率不降低的同时可以达到MobileNet的推理速度。 Transformers能否在获得高性能的同时,跑得和Mobile…...

【咕咕送书第二期】| 计算机网络对于考研的重要性?

🎬 鸽芷咕:个人主页 🔥 个人专栏:《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活! 文章目录 📋 前言什么是计算机网络?01 为什么计算机专业要学计算机网络02 计算机网络对考研的重要性 …...

【力扣】58. 最后一个单词的长度

题目描述 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s “Hello World” 输出&#xff1a…...

Java编程的精髓:深入理解JVM和性能优化

文章目录 Java虚拟机(JVM)的核心概念1. 类加载器(Class Loader)2. 内存区域3. 垃圾回收(Garbage Collection)4. 类型转换和多态 JVM性能调优1. JVM参数调整2. 内存管理3. 多线程优化4. 使用性能分析工具5. …...

易云维®智慧工厂数字化管理平台助推工业制造企业数字化转型新动能

近年来,我国正在积极推进工业制造企业数字化转型,工业制造企业数字化转型迎来了密集的利好政策,近期,国家工信部又出台系列政策,实施工业制造企业数字化促进工程,推动工业制造企业更快更好地拥抱数字经济。…...

0.基本概念——数据结构学习

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 数据:描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输出给计算机处理的符号集合。数据元素…...

Redis可视化工具-Another Redis Desktop Manager 安装

Another Redis DeskTop Manager 是 Redis 可视化管理工具,体积小,完全免费。最重要的是稳定,而且操作简单、方便。 目录 一、下载安装 下载 安装 二、简单使用 连接 新增key 三、springboot整合redis 前期准备 一、下载安装 下载 下载…...

ETLCloud工具让美团数据管理更简单

美团为第三方开发者和商家提供了一系列开放的API接口和工具,使其可以与美团的业务进行对接和集成,从而获得更多的业务机会和增长空间。 通过美团开放平台,第三方开发者和商家可以实现以下功能: 开放接口:美团开放平台…...

ctfshow 命令执行 (29-39)

学习参考的 https://www.cnblogs.com/NPFS/p/13279815.html 说的很全面 web29 命令执行,需要严格的过滤 源码 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__); } …...

如何玩转CSDN AI工具集

前言 人工智能生成内容(AIGC)是当下最具有前景的技术领域之一。AI能够以惊人的速度和准确度生成各种类型的内容,完成文章翻译、代码生成、AI对话、插图创作等工作,带来了许多令人兴奋的机遇。 本文将介绍CSDN AI工具集的基本使用…...

软件测试/测试开发丨利用人工智能ChatGPT自动生成PPT

点此获取更多相关资料 简介 PPT 已经渗透到我们的日常工作中,无论是工作汇报、商务报告、学术演讲、培训材料都常常要求编写一个正式的 PPT,协助完成一次汇报或一次演讲。PPT相比于传统文本的就是有布局、图片、动画效果等,可以给到观众更好…...

Vue 正计时器组件

工作中遇到了一个时间正计时的功能。 另外涉及到有Vue父组件调用子组件中的data和method,作为记录。 下面贴代码~ HTML部分 <template><div class"timer"><div ref"startTimer">00:00:00</div></div> </template>JS…...

神仙打架!谷歌和OpenAI竞相推出多模式AI

原创 | 文 BFT机器人 随着秋季的到来&#xff0c;科技界正在展开另一场季节性活动——科技巨头谷歌和OpenAI正在竞相发布下一代多模态大语言模型&#xff0c;这些高级模型能够解释图像和文本&#xff0c;使他们能够执行诸如从草图生成网站代码或以文本形式描述视觉图表等任务。…...

MySQL 字符集

文章目录 1.简介2.支持的字符集3.字符集级别4.数据库字符集5.数据表字符集6.表字段字符集7.字符串常量字符集8.客户端字符集参考文献 1.简介 MySQL 支持多种字符集&#xff0c;使您能够使用各种字符集存储数据&#xff0c;并根据给定排序规则执行比较。 MySQL 服务器默认字符…...

java生成PDF的Util

java使用itext生成pdf-CSDN博客 接上文 支持绘制表格 支持表格中的文本 字体加粗、字体上色、单元格背景上色&#xff0c; 支持拼接文本 支持单行文本 多种背景颜色、字体上色 支持自定义水印 废话不说先上效果图 工具类代码 package com.zxw.文件.PDF.util;import com.…...

【openwrt学习笔记】新patch的制作和旧patch的修改

目录 一、参考资料二、使用QUILT工具添加补丁2.1 添加一个新的补丁2.2 编辑一个已存在的补丁2.3 补丁命名规范2.4 添加或修改内核补丁文件 三、使用diff 打补丁四、相关问题及解决方法4.1 make package/package-name/update Vs失败 一、参考资料 Working with patches 二、使…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...