运算符与表达式

news2024/11/25 20:46:47

运算符和表达式是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 = 0
    printf("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.coloradmin.cn/o/1827505.html

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

相关文章

【odoo】右上角的提示(通知服务)

概要 在Odoo中&#xff0c;右上角的提示&#xff08;通知服务&#xff09;用于显示系统消息、警告、错误或信息提示。这个功能通过 JavaScript 在前端实现&#xff0c;并且使用 Odoo Web 框架提供的现成功能。 提示类型 信息提示 (Info)&#xff1a;用于显示普通信息。这类提示…

Windows配置域名映射IP

一、找到 hosts 文件 打开 C:\Windows\System32\drivers\etc 二、添加hosts文件修改、写入权限 右击hosts文件&#xff0c;点击属性 -> 安全 -> Users -> 编辑 -> Users -> 添加修改、写入权限 -> 确定 -> 确定 三、添加映射规则 在文件尾部添加一行映射…

企业数据中台功能介绍

参考视频&#xff1a; 企业级数据中台功能演示_哔哩哔哩_bilibili 具体项目&#xff1a; 平台基础设施: 系统管理,系统监控&#xff08;登录/操作日志&#xff09;,任务调度 元数据管理: 业务系统管理/数据源管理/数据表管理/字段管理 数据源,元数据,数据授权,变更记…

基于Wireshark实现对FTP的抓包分析

基于Wireshark实现对FTP的抓包分析 前言一、虚拟机Win10环境配置二、FileZilla客户端的安装配置下载FileZilla客户端安装FileZilla 三、FileZilla Server安装下载FileZilla Server安装 四、实现对FTP的抓包前置工作实现抓包完成抓包 前言 推荐一个网站给想要了解或者学习人工智…

【纯干货级教程】深度学习/目标检测训练出的loss曲线应该怎么观察分析判断?——以YOLOv5/v7为例

相信很多刚刚接触目标检测系列算法小伙伴跑深度学习算法时会有许多困惑&#xff0c;比如训练得出的loss曲线有什么意义&#xff1f;选择哪个算法模型作为baseline、选择哪个参数量/复杂度/深度的模型进行训练最为合适&#xff1f; 本文主要从训练过程中、训练得出的结果文件来…

【保姆级讲解下QT6.3】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Techo TVP技术 沙龙

Techo TVP技术 沙龙 今天参加了 在上海 徐汇 腾讯云大厦 举办的 Techo TVP 技术沙龙&#xff08;主要介绍 AI agent 让我感受很深&#xff09; &#xff0c;那什么是 AI Agent呢&#xff1f; 是一个智能体&#xff0c;由大语言模型驱动&#xff0c;具有自主理解、感知、规划、…

Git冲突解决指南:如何优雅地解决代码合并冲突

在团队协作开发中&#xff0c;使用版本控制系统Git是非常常见的。然而&#xff0c;在多人同时对同一文件进行修改时&#xff0c;就可能出现代码合并冲突。这时就需要我们学会如何优雅地解决这些冲突&#xff0c;保证代码的完整性和质量。本文将为您介绍Git冲突解决的基本原则和…

Elixir学习笔记——进程(Processes)

在 Elixir 中&#xff0c;所有代码都在进程内运行。进程彼此隔离&#xff0c;彼此并发运行并通过消息传递进行通信。进程不仅是 Elixir 中并发的基础&#xff0c;而且还提供了构建分布式和容错程序的方法。 Elixir 的进程不应与操作系统进程混淆。Elixir 中的进程在内存和 CPU…

【数学代码】幂

Hello!大家好&#xff0c;我是学霸小羊&#xff0c;今天来讲讲幂。 求几个相同因数的积的运算&#xff0c;叫做乘方&#xff0c;乘方的结果叫做幂。 a^n&#xff0c;读作 “ a的n次方 ” 或 “ a的n次方幂”&#xff0c;a叫做底数&#xff0c;n叫做指数。 对于底数、指数和幂…

开源高效API管理工具:RAP

RAP&#xff1a;简化API开发&#xff0c;提升团队协作效率- 精选真开源&#xff0c;释放新价值。 概览 RAP&#xff08;RESTful API Project&#xff09;是一个开源的API管理工具&#xff0c;由阿里巴巴团队开发并维护。它旨在帮助前后端开发人员通过一个统一的平台来设计、开…

《分析模式》漫谈03- Unified Method并不是RUP

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在《分析模式》第2章 &#xff0c;Fowler提到了“Rational Softwares Unified Method”&#xff0c; 而且给出了引用的参考文献&#xff0c;是Rational公司的一份文档&#xff1a; 200…

CSS入门到精通——表格样式

目录 表格边框 任务描述 相关知识 表格边框 折叠边框 编程要求 表格颜色、文字与大小 任务描述 相关知识 表格颜色 表格文字对齐与文字粗细 表格宽度和高度 任务要求 表格边框 任务描述 本关任务&#xff1a;在本关中&#xff0c;我们将学习如何使用CSS设置表格样…

基于carsim的线控转向仿真(1)--carsim车辆模型目标角度跟踪

一、Rwa转向执行总成建模 Rwa包括齿轮齿条机构、转向组件以及转向执行电机&#xff1b;如下图&#xff0c;电机输出轴通过齿轮减速增扭后&#xff0c;再经过一个半径为rp的小齿轮&#xff0c;直接带动齿条左右移动。齿条的移动通过转向摇臂&#xff0c;带动车轮转动&#xff0c…

Django初学者指南

文章目录 Django初学者指南1 Django简介1.1 Django的历史1.2 使用Django的知名网站1.4 Django的主要特点1.5 Django的工作原理 2 Django 使用2.1 Django 支持的 Python 版本2.2 Django 版本 3 Django 开发 Web 程序3.1 安装Django3.2 创建Django项目3.3 运行开发服务器3.4 创建…

【C++】【期末考】【基本概念和语法】概括总结——期末速成

目录 1. C简介 C的历史与发展 C的特点与优势 2. 基本语法 注释 数据类型与变量 常量 运算符 输入与输出 3. 控制结构 条件语句 循环语句 4. 函数 函数定义与声明 参数传递 返回值 函数重载 5. 数组与字符串 一维数组 多维数组 字符串处理 6. 指针 指针的…

数字电路中二进制的数据表达

文章目录 1. 二进制数据表达 1.1 二进制简介 1.2 用二进制表达文字 1.2.1 最开始的表达方式 1.2.2 通讯系统的编码和解码 1.2.3 集成电路 1.2.4 ASCII编码 1.2.5 GBK编码 1.2.6 Unicode编码 2. 用二进制表达图像 2.1 图片像素化 2.2 像素数字化 2.3 二值图像 2.4…

HTML+CSS 旋转呼吸加载器

效果演示 实现了一个旋转加载动画效果&#xff0c;包括一个圆形的加载框和两个不同颜色的圆形旋转动画。加载框和动画都使用了CSS的动画属性&#xff0c;实现了旋转和缩放的效果。整个加载动画的样式比较简单&#xff0c;使用了黑色和黄色的背景色&#xff0c;以及白色的文本颜…

哈希表、递归在二叉树中的应用-1372. 二叉树中的最长交错路径

题目链接及描述 1372. 二叉树中的最长交错路径 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目所述&#xff0c;计算在二叉树中交替遍历的最大深度【左->右->左】【右->左->右】&#xff0c;例如对于从当前根节点root出发&#xff0c;则此时遍历方向有两个…

【健身经验】2 圆肩

1、普拉提是针对小肌肉群锻炼&#xff0c;可以改善圆肩&#xff0c;圆肩就是因为背部没有力量&#xff0c;胸前也没有力量&#xff0c;因为平常没有用到这些肌肉 普拉提会用到小肌肉群&#xff0c;对于体态的纠正会比较好 2、肩背形态其实是发力问题&#xff0c;可以练习&…