运算符与表达式

运算符和表达式是C语言编程的基础构建块,它们共同构成了C语言程序的核心逻辑和计算。理解和掌握运算符和表达式的相关知识,对于编写高效、易读的C语言代码至关重要。

一、运算符概述

运算符是C语言中用于执行各种操作的符号,它们可以对变量、常量、表达式等进行操作。运算符是C语言中不可或缺的一部分,它们赋予了程序执行各种计算、比较、逻辑判断、位操作等功能。

1. 运算符的分类

C语言中的运算符可以根据其功能和操作对象进行分类,主要包括以下几类:

  • 算术运算符:用于执行基本的数学运算,如加法、减法、乘法、除法、取余等。
  • 关系运算符:用于比较两个操作数,返回布尔值(0或1),表示比较结果是否成立。
  • 逻辑运算符:用于执行逻辑操作,常用于条件判断和控制流程。
  • 位运算符:用于对整数的二进制位进行操作,常用于高效的位操作和数据处理。
  • 赋值运算符:用于给变量赋值或更新变量的值。
  • 其他运算符:包括指针运算符、结构体成员运算符、条件运算符、逗号运算符等。

2. 运算符的优先级和结合性

运算符的优先级和结合性决定了表达式中运算的顺序。优先级高的运算符优先执行,而结合性决定了相同优先级的运算符的执行顺序。

  • 优先级:优先级高的运算符优先执行。例如,乘除法优先级高于加减法,所以表达式 a + b * c 会先执行 b * c,然后再执行 a + (b * c)
  • 结合性:结合性是指当多个相同优先级的运算符出现在表达式中时,它们的执行顺序。
    • 左结合:从左到右执行。例如,表达式 a - b + c 会先执行 a - b,然后再执行 (a - b) + c
    • 右结合:从右到左执行。例如,表达式 a = b = c 会先执行 b = c,然后再执行 a = (b = c)

二、基本运算符详解

1. 算术运算符

算术运算符用于执行基本的数学运算,如加法、减法、乘法、除法等。

运算符操作示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 31
%取余5 % 32

示例代码:

#include <stdio.h>int main() {int a = 5, b = 3;printf("a + b = %d\n", a + b); // 加法printf("a - b = %d\n", a - b); // 减法printf("a * b = %d\n", a * b); // 乘法printf("a / b = %d\n", a / b); // 除法printf("a %% b = %d\n", a % b); // 取余return 0;
}

2. 关系运算符

关系运算符用于比较两个操作数,返回布尔值(0或1),表示比较结果是否成立。

运算符操作示例结果
==等于5 == 30
!=不等于5 != 31
>大于5 > 31
<小于5 < 30
>=大于等于5 >= 31
<=小于等于5 <= 30

示例代码:

#include <stdio.h>int main() {int a = 5, b = 3;printf("a == b: %d\n", a == b); // 等于printf("a != b: %d\n", a != b); // 不等于printf("a > b: %d\n", a > b);   // 大于printf("a < b: %d\n", a < b);   // 小于printf("a >= b: %d\n", a >= b); // 大于等于printf("a <= b: %d\n", a <= b); // 小于等于return 0;
}

3. 逻辑运算符

逻辑运算符用于执行逻辑操作,常用于条件判断和控制流程。

运算符操作示例结果
&&逻辑与1 && 00
逻辑或
!逻辑非!10

示例代码:

#include <stdio.h>int main() {int a = 1, b = 0;printf("a && b: %d\n", a && b); // 逻辑与printf("a || b: %d\n", a || b); // 逻辑或printf("!a: %d\n", !a);         // 逻辑非return 0;
}

4. 位运算符

位运算符用于对整数的二进制位进行操作,常用于高效的位操作和数据处理。

运算符操作示例结果
&按位与5 & 31
按位或5
^按位异或5 ^ 36
~按位取反~5-6
<<左移5 << 110
>>右移5 >> 12

示例代码:

#include <stdio.h>int main() {int a = 5, b = 3;printf("a & b: %d\n", a & b); // 按位与printf("a | b: %d\n", a | b); // 按位或printf("a ^ b: %d\n", a ^ b); // 按位异或printf("~a: %d\n", ~a);       // 按位取反printf("a << 1: %d\n", a << 1); // 左移printf("a >> 1: %d\n", a >> 1); // 右移return 0;
}

5. 赋值运算符

赋值运算符用于给变量赋值或更新变量的值。

运算符操作示例结果
=简单赋值b = ab的值为a的值
+=加且赋值b += ab的值为b+a的值
-=减且赋值b -= ab的值为b-a的值
*=乘且赋值b *= ab的值为b*a的值
/=除且赋值b /= ab的值为b/a的值
%=取余且赋值b %= ab的值为b%a的值

示例代码:

#include <stdio.h>int main() {int a = 5, b;b = a; // 简单赋值printf("b = a: %d\n", b);b += a; // 加且赋值printf("b += a: %d\n", b);b -= a; // 减且赋值printf("b -= a: %d\n", b);b *= a; // 乘且赋值printf("b *= a: %d\n", b);b /= a; // 除且赋值printf("b /= a: %d\n", b);b %= a; // 取余且赋值printf("b %%= a: %d\n", b);return 0;
}

三、表达式的优先级与结合性

运算符的优先级和结合性决定了表达式中运算的顺序。优先级高的运算符优先执行,而结合性决定了相同优先级的运算符的执行顺序。

1. 运算符优先级表

优先级运算符结合性
1() [] -> .左结合
2! ~ ++ -- + - * & (类型) sizeof右结合
3* / %左结合
4+ -左结合
5<< >>左结合
6< <= > >=左结合
7== !=左结合
8&左结合
9^左结合
10``
11&&左结合
12`
13?:右结合
14= += -= *= /= %= &= ^= `=<<=>>=`
15,左结合

2. 结合性

结合性是指当多个相同优先级的运算符出现在表达式中时,它们的执行顺序。

  • 左结合:从左到右执行。
  • 右结合:从右到左执行。

四、复杂表达式的构建与简化

由于运算符的优先级和结合性,某些复杂表达式可能并不直观。为了提高代码的可读性和可维护性,建议使用括号来明确表达式的计算顺序。

示例代码:

#include <stdio.h>int main() {int a = 10, b = 5, c;float result;// 算术运算c = a + b * 2; // 结果为 20,因为乘法优先级高于加法printf("a + b * 2 = %d\n", c);// 使用括号明确顺序c = (a + b) * 2; // 结果为 30,因为括号优先printf("(a + b) * 2 = %d\n", c);// 关系运算和逻辑运算if (a > b && b != 0) {result = (float)a / b; // 强制类型转换printf("a / b = %.2f\n", result);}// 位运算c = a & b; // 结果为 0,因为 10 & 5 = 0printf("a & b = %d\n", c);return 0;
}

五、表达式的优化技巧

在编写C语言代码时,优化表达式可以提高代码的执行效率和可读性。以下是几种常见的优化技巧:

  1. 减少冗余计算:将重复计算的部分提取出来。

   // 优化前result = a * b + a * c + a * d;// 优化后temp = a;result = temp * b + temp * c + temp * d;

  1. 使用位运算代替算术运算:位运算通常比算术运算更高效。

   // 优化前result = a * 4;// 优化后result = a << 2; // 左移2位,相当于乘4

  1. 使用条件运算符代替简单的if-else结构

   // 优化前if (a > b) {result = a;} else {result = b;}// 优化后result = (a > b) ? a : b;

六、总结

运算符和表达式是C语言编程的基石,通过理解和掌握各种运算符及其优先级和结合性,我们可以编写出更高效、更易读的代码。运算符的适当使用和表达式的优化,对于实现复杂逻辑和提高程序性能至关重要。

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

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

相关文章

python错题(1)

字典中min&#xff0c;max最后比较的是键&#xff0c;输出的是键

解决Pycharm远程连接WSL2的python解释器,使用调试模式时显示超时的问题

环境 windows 11wsl2ubuntu20.04pycharm2023.3.3 问题 Pycharm远程连接WSL2的python解释器&#xff0c;使用调试模式时显示超时 分析 TCP连接错误。 解决方法 windows高级防火墙设置->入站规则->找到pycharm2023.3.3的TCP连接规则->双击允许连接 步骤截图见下…

C++ 53 之 继承中同名成员处理

#include <iostream> #include <string> using namespace std;class Base06{ public:int m_a;Base06(){this->m_a 10;}void fun(){cout << "父类的fun函数" << endl;}void fun(int a){cout << "父类的fun(int a)函数" &…

远程连接服务器的工具?

远程连接服务器工具是现代工作环境中不可或缺的工具之一。它允许用户通过网络远程访问和控制远程服务器&#xff0c;为用户提供了更加便捷和高效的工作方式。无论是远程办公、远程维护还是云计算&#xff0c;远程连接服务器工具都发挥着重要的作用。 在众多远程连接服务器工具…

c++20 规范, vs2019 , 头文件 <mutex> ,注释以及几个探讨

&#xff08;1 探讨一&#xff09; mutex 这个名称的来源是 mutual exclusion &#xff1a;互相排斥。 mutex 与 recursive_mutex 的数据成员的定义如下&#xff1a; 测试如下&#xff1a; 运行以下&#xff1a; 以及&#xff1a; &#xff08;2 探讨二&#xff09; recursive_…

GitHub Copilot 登录账号激活,已经在IntellJ IDEA使用

GitHub Copilot 想必大家都是熟悉的&#xff0c;一款AI代码辅助神器&#xff0c;相信对编程界的诸位并不陌生。 今日特此分享一项便捷的工具&#xff0c;助您轻松激活GitHub Copilot&#xff0c;尽享智能编码之便利&#xff01; GitHub Copilot 是由 GitHub 和 OpenAI 共同开…

python基础 002 - 2 常用数据类型

python的常用数据类型 int , 整型 1,2,3float ,小数&#xff0c;浮点类型1.2bool , boolean 布尔&#xff0c;真假。判断命题。True Flasestr &#xff0c;字符串 list , 列表 a []tuple, 元组 a ()dict , dictionary, 字典 a {}set , 集合 a {} 1 查看数据类型 typ…

Apache Doris 基础 -- 部分数据类型及操作

您还可以使用SHOW DATA TYPES;查看Doris支持的所有数据类型。 部分类型如下&#xff1a; Type nameNumber of bytesDescriptionSTRING/可变长度字符串&#xff0c;默认支持1048576字节(1Mb)&#xff0c;最大精度限制为2147483643字节(2gb)。大小可以通过BE配置string_type_le…

点云传统算法

1 滤波&#xff0c;过滤噪点&#xff0c;下采样 统计滤波&#xff1a; voxel&#xff0c; 半径搜索&#xff1a; # 基于体素网格化的滤波器 voxel_down_pcd cloud.voxel_down_sample(voxel_size0.5)# 基于半径搜索的滤波器 cl, ind cloud.remove_statistical_outlier(nb_ne…

java问题解决: IDEA java 警告 源发行版 17 需要目标发行版 17

效果图 问题原因 jdk和你实际安装的jdk不匹配 解决问题 1.点击File -->Project Structure–>Project 修改这两处 2. 在Project Structure–>Modules中的红框位置都要调整对应版本 3、点击File–>settings–>java compile将对应框的版本修改成对应版本即可–改…

Cocos Creator,Youtube 小游戏!

YouTube 官方前段时间发布了一则重磅通知&#xff0c;宣布平台旗下小游戏功能 Youtube Playables 正式登录全平台&#xff08;安卓、iOS、网页&#xff09;&#xff0c;并内置了数十款精选小游戏。 Youtube Playables 入口&#xff1a; https://www.youtube.com/playables Coco…

苹果WWDC 2024 带来的 AI 风暴:从生产力工具到个人助理,AI 将如何融入我们的生活?

2024年6月5日&#xff0c;苹果WWDC 2024全球开发者大会如约而至&#xff0c;带来了众多令人兴奋的新功能和新产品。其中&#xff0c;AI 技术的全面融入无疑是最引人注目的亮点。从 iOS、iPadOS 到 macOS&#xff0c;再到 Siri 和开发者工具&#xff0c;苹果正在将 AI 融入到其生…

ubuntu20.04桌面蓝屏问题解决

前些天做仿真项目&#xff0c;遇到了ubuntu蓝屏问题&#xff0c;于是想着找几个参考办法修复&#xff0c;但不管用&#xff0c;疑似是重要组件损坏。 损坏的原因是强制关机&#xff0c;但究竟是强制关了哪一个卡死的进程&#xff0c;不得而知&#xff0c;我有一个关不掉的仿真…

万事开头难——Java实现俄罗斯小方块【第一步】

目录 技术实现&#xff1a; 1.初始化游戏窗口&#xff1b; 1.1 什么是窗口&#xff1a; 1.2 Swing 1.3 JFrame创建窗口&#xff1a; 1.3.1创建窗口的逻辑 1.3.2.设置简单的页面 1.3.3.优化 1.3.4.设置标题 1.4 创建游戏窗口 技术实现&#xff1a; 1.初始化游戏窗口&am…

基于android开发平台的聊天软件实现(论文+源码)_kaic

摘要&#xff1a;互联网时代的到来使得手机通讯变得更为普及和强大&#xff0c;人们可以随时随地地进行交流。由于工作的繁忙以及生活节奏的加快&#xff0c;人们无法有更多时间展开面对面的交谈&#xff0c;导致在线聊天软件的使用更加频繁&#xff0c;所以本文尝试设计了一款…

Node入门以及express创建项目

前言 记录学习NodeJS 一、NodeJS是什么&#xff1f; Node.js 是一个开源和跨平台的 JavaScript 运行时环境 二、下载NodeJs 1.下载地址(一直点击next即可&#xff0c;记得修改安装地址) https://nodejs.p2hp.com/download/ 2.查看是否安装成功&#xff0c;打开命令行 nod…

css入门宝典

3.1.4 通配符选择器 语法 : *{} 作用 : 让页面中所有的标签执行该样式,通常用来清除间距 例子 : *{ margin: 0; //外间距 padding: 0; //内间距 } 一 CSS基本语法 1基础知识 1.1概述 Css (层叠样式表)是种格式化网页的标准方式&#xff0c; 用于控制设置网页的样式&#xff…

windows系统,家庭自用NAS。本地局域网 Docker安装nextcloud

windows系统&#xff0c;家庭自用NAS。本地局域网 Docker安装nextcloud 1、docker安装 太简单了&#xff0c;直接去搜一搜。 docker-compose 相关命令 docker-compose down docker compose up -d2、还是使用老的 在你需要挂载的目录下&#xff0c;新建一个文件&#xff0c;…

POC EXP | woodpecker插件编写

woodpecker插件编写 目录 woodpecker介绍woodpecker使用插件编写 安装环境 woodpecker-sdkwoodpecker-request 创建Maven项目 Confluence OGNL表达式注入漏洞插件编写 创建Package包和Class类编写POC 漏洞POC代码编写导出jar包将jar包放入woodpecker的plugin目录运行woodpeck…

springCloudAlibaba之分布式网关组件---gateway

gateway-网关 网关spring cloud gateway 网关 在微服务架构中一个系统会被拆分成多个微服务。那么作为客户端(前端)要如何去调用这么多的微服务&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去用。 这样的架构&#x…