7. C语言 运算符详解

本章目录:

    • 前言
    • C语言运算符的分类
      • 1. 算术运算符
      • 2. 关系运算符
      • 3. 逻辑运算符
      • 4. 位运算符
      • 5. 赋值运算符
      • 6. 杂项运算符
    • 运算符优先级


前言

在C语言中,运算符是程序中执行各种操作的核心工具,涉及算术运算、逻辑判断、位操作等多个方面。掌握C语言中的各种运算符对于写出高效、简洁的代码至关重要。本文将对C语言的运算符进行详细解析,包括其分类、常见使用方法及优化技巧。


C语言运算符的分类

C语言中的运算符可以按功能划分为以下几类:

  1. 算术运算符:用于进行数学运算。
  2. 关系运算符:用于比较两个操作数。
  3. 逻辑运算符:用于逻辑判断。
  4. 位运算符:用于处理二进制数据。
  5. 赋值运算符:用于给变量赋值。
  6. 杂项运算符:包括sizeof()、指针操作符、三元运算符等。

1. 算术运算符

算术运算符用于进行基本的数学计算,C语言提供了加、减、乘、除等多种运算。

运算符描述示例
+加法A + B
-减法A - B
*乘法A * B
/除法A / B
%取余A % B
++自增A++
--自减A--

示例:

#include <stdio.h>

int main() {
    int a = 21;
    int b = 10;
    int c;

    c = a + b;
    printf("Line 1: c = %d\n", c);

    c = a - b;
    printf("Line 2: c = %d\n", c);

    c = a * b;
    printf("Line 3: c = %d\n", c);

    c = a / b;
    printf("Line 4: c = %d\n", c);

    c = a % b;
    printf("Line 5: c = %d\n", c);
    
    return 0;
}

输出:

Line 1: c = 31
Line 2: c = 11
Line 3: c = 210
Line 4: c = 2
Line 5: c = 1

2. 关系运算符

关系运算符用于比较两个操作数的大小或相等性,通常用于控制结构(如if语句)中。

运算符描述示例
==等于(A == B)
!=不等于(A != B)
>大于(A > B)
<小于(A < B)
>=大于或等于(A >= B)
<=小于或等于(A <= B)

示例:

#include <stdio.h>

int main() {
    int a = 21, b = 10;

    if (a == b) {
        printf("a equals b\n");
    } else {
        printf("a does not equal b\n");
    }

    return 0;
}

3. 逻辑运算符

逻辑运算符主要用于布尔值运算,在条件表达式中判断多个条件是否成立。

运算符描述示例
&&逻辑与(A && B)
||逻辑或(A || B)
!逻辑非!(A && B)

示例:

#include <stdio.h>

int main() {
    int a = 5, b = 10;
    
    if (a && b) {
        printf("Both a and b are non-zero\n");
    }

    if (a || b) {
        printf("At least one of a or b is non-zero\n");
    }

    return 0;
}

4. 位运算符

位运算符用于操作数字的二进制位,这在一些低级编程、嵌入式开发中非常有用。

运算符描述示例
&按位与A & B
|按位或A | B
^按位异或A ^ B
~按位取反~A
<<左移A << 2
>>右移A >> 2

交换两个数的值:

使用异或运算符^可以不借助临时变量交换两个数的值:

#include <stdio.h>

int main() {
    unsigned int a = 60;  // 0011 1100
    unsigned int b = 13;  // 0000 1101
    
    a = a ^ b;  // a = 0011 0001
    b = a ^ b;  // b = 0011 1100
    a = a ^ b;  // a = 0000 1101
    
    printf("a = %d, b = %d\n", a, b);  // 输出交换后的结果
    return 0;
}

输出:

a = 13, b = 60

5. 赋值运算符

赋值运算符用于将右侧的值赋给左侧的变量。C语言还提供了复合赋值运算符,如+=-=等,简化了某些常见操作。

运算符描述示例
=赋值C = A + B
+=加法赋值C += A
-=减法赋值C -= A
*=乘法赋值C *= A
/=除法赋值C /= A
%=求余赋值C %= A

示例:

#include <stdio.h>

int main() {
    int a = 21, c;
    
    c = a;
    printf("c = %d\n", c);

    c += a;
    printf("c += a: %d\n", c);

    c *= a;
    printf("c *= a: %d\n", c);

    return 0;
}

6. 杂项运算符

C语言中还有一些独特的运算符,像sizeof&*和三元运算符。

运算符描述示例
sizeof获取变量的大小sizeof(a)
&获取变量地址&a
*解引用指针*ptr
?:三元运算符condition ? x : y

示例:

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a;
    
    // sizeof 运算符
    printf("Size of a: %lu\n", sizeof(a));
    
    // 指针操作符
    printf("Address of a: %p\n", (void*)&a);
    printf("Value at ptr: %d\n", *ptr);
    
    // 三元运算符
    int b = (a == 10) ? 20 : 30;
    printf("b = %d\n", b);

    return 0;
}

运算符优先级

运算符优先级决定了表达式中各个操作数计算的顺序。较高优先级的运算符会先执行。

类别运算符结合性
后缀() [] -> . ++ --从左到右
一元+ - ! ~ ++ -- (type) * & sizeof从右到左
乘除* / %从左到右
加减+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超越YOLO11!DEIM:先进的实时DETR目标检测

DEIM: DETR with Improved Matching for Fast Convergence arXiv: https://arxiv.org/abs/2412.04234 Project webpage&#xff1a;https://www.shihuahuang.cn/DEIM/ GitHub&#xff1a;https://github.com/ShihuaHuang95/DEIM 1 背景&#xff1a;DETR目标检测框架 目标检…

深入理解 Java 接口的回调机制

前言 回调是一种非常重要的编程技术&#xff0c;它广泛应用于事件驱动的编程、异步任务和框架设计中。在 Java 中&#xff0c;回调机制通常通过 接口 来实现。本篇博客将详细解析 Java 接口的回调原理、实现方式&#xff0c;以及实际开发中的应用场景。 泪崩了&#xff0c;期末…

二、用例图

二、用例图 (一&#xff09;、用例图的基本概念 1、用例图的定义&#xff1a; 用例图是表示一个系统中用例与参与者关系之间的图。它描述了系统中相关的用户和系统对不同用户提供的功能和服务。 用例图相当于从用户的视角来描述和建模整个系统&#xff0c;分析系统的功能与…

【软考网工笔记】计算机基础理论与安全——网络安全

病毒 Melissa 宏病毒 1. 是一种快速传播的能够感染那些使用MS Word 97 和MS Office 2000 的计算机宏病毒。 2. 前面有**Macro** 表示这是宏病毒&#xff1b; 3. 宏病毒可以感染后缀为.xls的文件&#xff1b;Worm 蠕虫病毒 1. 通常是通过网络或者系统漏洞进行传播。 2. 利用信…

STM32 拓展 低功耗案例3:待机模式 (register)

需求描述 寄存器操作进入待机模式。待机模式的唤醒方式比较有限。我们这次使用WKUP引脚的上升沿唤醒。PA0就是WKUP引脚。 当然PA0仍然需要工作在下拉输入模式&#xff0c;只有这样当按键按下的时候才会有一个上升沿。 由于我们电路中PA0已经连接了LED1&#xff0c;所以要产生…

windows中硬件加速gpu计划开启cpu的使用率居高不下

1.加速gpu计划开启在任务管理器的gpu选项中看不到cuda选项&#xff0c;这给我们进行深度学习训练和推理带来很大影响。 2.开启硬件加速CPU的占用率明显增高&#xff0c;特别用GPU进行实时视频流解码时就不会分配给GPU解码&#xff0c;造成cpu占用居高不下。不利于深度学习训练…

【Go】运行自己的第一个Go程序

运行自己的第一个Go程序 一、Go语言的安装Go环境安装查看是否安装成功配置GOPROXY(代理) 二、Goland安装三、Goland破解四、新建项目 开一篇专栏记录学习Go的过程&#xff0c;一门新语言从hello world开始&#xff0c;这篇文章详细讲解Go语言环境搭建及hello world实现 一、Go语…

提升汽车金融租赁系统的效率与风险管理策略探讨

内容概要 在汽车金融租赁系统这个复杂的生态中&#xff0c;提升整体效率是每个企业都渴望达成的目标。首先&#xff0c;优化业务流程是实现高效运行的基础。通过分析目前的流程&#xff0c;找出冗余环节并进行简化&#xff0c;能够帮助企业缩短审批时间&#xff0c;提高客户满…

计算机网络 (25)IPV6

前言 IPv6&#xff0c;全称为“互联网协议第6版”&#xff08;Internet Protocol Version 6&#xff09;&#xff0c;是由互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议。 一、产生背景 IPv4&#xff0c;即互联网协议第4版&#xff0c;是现行…

嵌入式系统(将软件嵌入到硬件里面)

目录 Linux起源 查看操作系统的版本 查看内核的版本&#xff1a; 内核系统架构 系统关机或重启命令 关机&#xff1a; 重启&#xff1a; linux下的软件安装 两种软件包管理机制&#xff1a; deb软件包分为两种&#xff1a; 软件包的管理工具&#xff1a;dpkg apt 1…

Conda 安装 Jupyter Notebook

文章目录 1. 安装 Conda下载与安装步骤&#xff1a; 2. 创建虚拟环境3. 安装 Jupyter Notebook4. 启动 Jupyter Notebook5. 安装扩展功能&#xff08;可选&#xff09;6. 更新与维护7. 总结 Jupyter Notebook 是一款非常流行的交互式开发工具&#xff0c;尤其适合数据科学、机器…

web实操9——session

概念 数据保存在服务器HttpSession对象里。 session也是域对象&#xff0c;有setAttribute和getAttribute方法 快速入门 代码 获取session和塞入数据&#xff1a; 获取session获取数据&#xff1a; 请求存储&#xff1a; 请求获取&#xff1a; 数据正常打印&#xff1a…

如何在电脑上使用 FaceTime

如今&#xff0c;视频通话已成为与朋友、家人和同事保持联系的重要组成部分。 FaceTime 是 Apple 推出的一款功能丰富的视频通话应用程序。它以其简单性和视频质量而闻名。但如果您想在 PC 上使用 FaceTime该怎么办&#xff1f;虽然 FaceTime 仅适用于 Apple 设备&#xff0c;但…

(框架漏洞)

1.Thinkphp 1.Thinkphp5x远程命令执⾏及getshell 搭建靶场环境 vulhub/thinkphp/5-rce docker-compose up -d #启动环境 ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami ?s/Index/\think\app/invokefunctio…

探秘Kafka源码:关键内容解析

文章目录 一、以kafka-3.0.0为例1.1安装 gradle 二、生产者源码2.1源码主流程图2.2 初始化2.3生产者sender线程初始化2.4 程序入口2.5生产者 main 线程初始化2.6 跳转到 KafkaProducer构造方法 一、以kafka-3.0.0为例 打开 IDEA&#xff0c;点击 File->Open…->源码包解…

动态库dll与静态库lib编程4:MFC规则DLL讲解

文章目录 前言一、说明二、具体实现2.1新建项目2.2 模块切换的演示 总结 前言 动态库dll与静态库lib编程4&#xff1a;MFC规则DLL讲解。 一、说明 1.前面介绍的均为Win32DLL&#xff0c;即不使用MFC的DLL。 2.MFC规则DLL的特点&#xff1a;DLL内部可以使用MFC类库、可以被其他…

对比学习损失函数 - InfoNCE

InfoNCE Loss &#xff1a;构建高效对比学习模型 引言 对比学习中的InfoNCE损失函数是自监督学习领域的重要进展&#xff0c;它通过最大化正样本对之间的相似度并最小化负样本对的相似度&#xff0c;有效地引导模型学习到数据的本质特征。InfoNCE不仅提高了表示学习的质量&am…

家用万兆网络实践:紧凑型家用服务器静音化改造(二)

大家好&#xff0c;这篇文章我们继续分享家里网络设备的万兆升级和静音改造经验&#xff0c;希望对有类似需求的朋友有所帮助。 写在前面 在上一篇《家用网络升级实践&#xff1a;低成本实现局部万兆&#xff08;一&#xff09;》中&#xff0c;我们留下了一些待解决的问题。…

【STC库函数】Compare比较器的使用

如果我们需要比较两个点的电压&#xff0c;当A点高于B点的时候我们做一个操作&#xff0c;当B点高于A点的时候做另一个操作。 我们除了加一个运放或者比较器&#xff0c;还可以直接使用STC内部的一个比较器。 正极输入端可以是P37、P50、P51&#xff0c;或者从ADC的十六个通道…

东京大学联合Adobe提出基于指令的图像编辑模型InstructMove,可通过观察视频中的动作来实现基于指令的图像编辑。

东京大学联合Adobe提出的InstructMove是一种基于指令的图像编辑模型&#xff0c;使用多模态 LLM 生成的指令对视频中的帧对进行训练。该模型擅长非刚性编辑&#xff0c;例如调整主体姿势、表情和改变视点&#xff0c;同时保持内容一致性。此外&#xff0c;该方法通过集成蒙版、…