C语言中操作符详解(中)

C语言中操作符详解中

  • 放在最前面的
  • 1、操作数(Operands)
  • 2、单目操作符
    • 2.1、分类
    • 2.2、举例分析(上代码)
  • 3、关系操作符
    • 3.1、分类
    • 3.2、举例分析(上代码)
  • 4、逻辑操作符
    • 4.1、分类
    • 4.2、举例分析(上代码)
        • 运行结果:
  • 5、短路特性(逻辑运算符 &&和 ||)
    • 5.1、定义
    • 5.2、分类
        • (1) 对于逻辑与运算符&&
        • (2) 对于逻辑或运算符 ||
    • 5.3、举例分析(上代码)
        • 运行结果:
  • END

放在最前面的

🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼
🎉🎉我的C语言初阶合集:C语言初阶合集,希望能帮到你!!!😍 😍
👋🏼🎉🎊创作不易,欢迎大家留言、点赞加收藏!!! 🥳😁😍

1、操作数(Operands)

操作数 是 操作符作用的对象。
在C语言中,操作数可以是常量、变量、表达式的值等。
操作数 通常位于 操作符 的 左侧 或 右侧(或两者都是,对于二元操作符而言)。

2、单目操作符

单目操作符的特点是只有⼀个操作数

2.1、分类

序号单目操作符 符号解释
1逻辑反操作符
2++前置与后置自增操作符
3- -前置与后置自减操作符
4&取地址操作符
5*解引用操作符
6+正值操作符
7-负值操作符
8~按位(二进制位)取反操作符
9sizeof类型长度计算操作符
10(类型)强制类型转换操作符

2.2、举例分析(上代码)

(1)逻辑反操作符 !

补充:

在C语言中,进行判断时,数字0 表示假,非0 的数字表示真。

//逻辑反操作符 !
//作用:对操作数的逻辑值取反。如果操作数为真(非0),则结果为假(0);
//如果操作数为假(0),则结果为真(1)。int a = 5;
int ret = !a; // ret 的值为 0,因为 5 为真,取反后为假(0)
printf("%d\n",ret);

输出结果
(2)前置与后置自增操作符(++) 和 前置与后置自减操作符( - -)

//作用:使变量的值增加或减少1。
//前置操作符(++var 或 --var)先改变变量的值,然后返回改变后的值;
//后置操作符(var++ 或 var--)先返回变量的原始值,然后改变变量的值。#include<stdio.h>int main()
{int a = 10;int b = ++a; // b 的值为 11,a 的值也变为 11(前置自增)int c = a--; // c 的值为 11,但随后 a 的值变为 10(后置自减)//输出printf("b = %d\n", b);printf("c = %d\n", c);return 0;
}

输出结果

(3)取地址操作符 &

//作用:获取变量的内存地址。#include<stdio.h>int main()
{int a = 10;int* pa = &a; // 指针pa 存储了变量 a 的内存地址//输出//%p  是以十六进制数的形式打印地址(内存单元编号)printf("%p\n", &a);printf("%p\n", pa);return 0;
}

输出结果

(4)解引用操作符(*)

//作用:通过指针获取其指向的变量的值。#include<stdio.h>int main()
{int a = 10;int* p = &a;int b = *p; // b 的值为 10,即变量 a 的值//输出printf("b = %d\n", b);return 0;
}

输出结果
(5)正负值操作符(+、-)

//作用:用于表示数值的正负。
// 正号(+)通常可以省略,因为它不改变数值;
// 负号(-)则用于将数值变为相反数。#include<stdio.h>int main()
{int num = 10;int a = +num; // a 的值为 10,正号不改变数值int b = -num; // b 的值为 -10,取相反数//输出printf("a = %d\n", a);printf("b = %d\n", b);return 0;
}

输出结果
(6)按位取反操作符(~)

//作用:对操作数的二进制表示进行按位取反(即0变为1,1变为0)。#include<stdio.h>int main()
{int a = 0;int ret = ~a; // 对于 a 的二进制表示(全为0),取反后全为1,即 -1(在补码表示下)printf("%d\n", ret); // 输出 -1return 0;
}

输出结果
(7)类型长度计算操作符(sizeof)

//作用:计算变量或数据类型所占的内存大小(以字节为单位)。#include<stdio.h>int main()
{int a = 10;// sizeof 计算 变量或数据类型所占的内存大小 返回值是 大于等于 0的数// %zd 是无符号的占位符(格式控制符) // %u 也是printf("%zd\n", sizeof(a)); // 输出 a 所占的字节数,通常为 4(取决于编译器和平台)return 0;

输出结果
(8)强制类型转换操作符((类型))

//作用:将操作数强制转换为指定的数据类型。#include<stdio.h>int main()
{//定义一个双精度型 double 变量 paidouble pai = 3.14;// P 的值为 3,因为 3.14 被强制转换为整数类型,小数部分被截断int p = (int)pai; //输出printf("p = %d\n", p);return 0;
}

输出结果

3、关系操作符

在C语言中,关系操作符(也称为比较操作符)用于比较两个值,
并返回一个布尔值(在C语言中通常通过整数 0 或 1表示)。

这些操作符通常用于条件语句(如 if 语句)和循环语句(如 while 或 for 循环)中,以控制程序的流程。

3.1、分类

C语言中的关系操作符包括:

关系操作符功能 及 返回值
等于 (==)判断两个值是否相等。如果相等,返回1(真),否则返回0(假)。
不等于 (!=)判断两个值是否不相等。如果不相等,返回1(真),否则返回0(假)。
大于 (>)判断左边的值是否大于右边的值。如果是,返回1(真),否则返回0(假)。
小于 (<)判断左边的值是否小于右边的值。如果是,返回1(真),否则返回0(假)。
小于等于 (<=)判断左边的值是否小于或等于右边的值。如果是,返回1(真),否则返回0(假)。
大于等于 (>=)判断左边的值是否大于或等于右边的值。如果是,返回1(真),否则返回0(假)。

3.2、举例分析(上代码)

#include <stdio.h>int main() 
{int a = 10;int b = 20;// 等于 (==)if (a == b) {printf("a等于b\n");}else {printf("a不等于b\n");}// 不等于 (!=)if (a != b) {printf("a不等于b\n");}// 大于 (>)if (a > b) {printf("a大于b\n");}else {printf("a不大于b\n");}// 小于 (<)if (a < b) {printf("a小于b\n");}// 大于等于 (>=)if (a >= 10) {printf("a大于等于5\n");}// 小于等于 (<=)if (b <= 20) {printf("b小于等于10\n");}return 0;
}

4、逻辑操作符

在C语言中,逻辑操作符 用于根据布尔值(在C语言中,通常使用 整数 0表示假,非 0 值表示真)的逻辑关系进行运算。

这些操作符在 条件判断、循环控制 以及 位运算 等场景中都有广泛应用

4.1、分类

C语言中的逻辑操作符主要包括以下三种:

逻辑操作符功能 及 返回值短路特性
逻辑与(&&)只有当两个操作数都为真(非0)时,结果才为真(1)。如果任意一个操作数为假(0),则结果为假(0)。如果第一个操作数为假,则不会计算第二个操作数,因为结果已经确定为假。
逻辑或(两根竖线)只要有一个操作数为真(非0),结果就为真(1)。只有当两个操作数都为假(0)时,结果才为假(0)。如果第一个操作数为真,则不会计算第二个操作数,因为结果已经确定为真。
逻辑非(!)对操作数的布尔值进行取反。如果操作数为真(非0),则结果为假(0);如果操作数为假(0),则结果为真(1)。
  • 逻辑或(两根竖线)(||)

4.2、举例分析(上代码)

#include <stdio.h>int main() 
{int x = 5;int y = 0;// 逻辑与(&&)if (x > 0 && y > 0) {printf("x和y都大于0\n");}else {printf("x或y(或两者)不大于0\n");}// 逻辑或(||)if (x > 0 || y > 0) {printf("x或y(或两者)大于0\n");}// 逻辑非(!)if (!y) {printf("y是0(假)\n");}else {printf("y不是0(真)\n");}return 0;
}
运行结果:

5、短路特性(逻辑运算符 &&和 ||)

5.1、定义

在C语言中,逻辑运算符的短路特性 是一种优化机制,
它允许在逻辑表达式求值过程中,一旦能够确定整个表达式的最终结果,就立即停止对剩余部分的计算。
这种特性主要适用于 逻辑与(&&)和逻辑或(||)运算符

5.2、分类

(1) 对于逻辑与运算符&&

如果第一个操作数为 假(即 等于 0),那么无论第二个操作数的值是什么,整个逻辑表达式的结果都将是假。
因此,在这种情况下,C语言编译器会“短路”掉第二个操作数的计算,因为它对最终结果没有影响。

(2) 对于逻辑或运算符 ||

如果 第一个操作数为 真(即 非 0),那么无论第二个操作数的值是什么,整个逻辑表达式的结果都将是真。
因此,在这种情况下,C语言编译器同样会“短路”掉第二个操作数的计算。

5.3、举例分析(上代码)

#include <stdio.h>int main()
{// 短路特性示例int a = 0;int b = 1;int ret1 = 0;int ret2 = 0;// 逻辑与的短路特性ret1 = ( (a != 0) && (a + b)); // 这里不会执行 a + b ,因为a != 0已经为假//输出printf("逻辑与 的短路结果:%d\n", ret1); // 输出0// 逻辑或的短路特性ret2 = ( (a == 0) || (a + b)); // 这里  (a + b) 不会执行,由于 a == 0为真(即 a != 0为假),// 但 || 只需要一个真值 , 且短路特性只跳过不必要的计算。// 正确的展示短路特性的写法应该是确保第一个条件为真时不会执行第二个可能导致错误的条件。// 例如:ret = (1 || (a + b) ); // 这里不会执行 (a + b),因为 1 已经为真//输出printf("逻辑或 的短路结果:%d\n", ret2); // 输出 1return 0;
}
运行结果:

END

每天都在学习的路上!
On The Way Of Learning

“哇哦😎,我们一起走过了这篇文章的旅程🚀。你觉得这篇文章对你有帮助吗😜?
有没有什么特别的感受或者想法💡想要和大家分享呢😏?
赶紧在评论区留言吧,让我们的思想在这里碰撞出火花🔥💥!”

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

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

相关文章

生成模型——扩散模型(Diffusion Model)

一、扩散模型简介 扩散模型&#xff08;Diffusion Model&#xff09;是一种生成模型&#xff0c;主要用于图像生成等任务。它的基本原理源于扩散过程的物理概念&#xff0c;通过最小化去噪过程中的重建损失&#xff08;通常使用均方误差&#xff09;来训练模型&#x…

ssm101珠宝首饰交易平台开发+jsp.zip(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 珠宝首饰交易平台 学 院 专 业 班 级 学 号 用户姓名 指导教师 完成日期 …

关于我、重生到500年前凭借C语言改变世界科技vlog.18——内存函数

文章目录 1. memcpy函数2. memmove函数3. memset函数4. memcmp函数希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 内存函数是用于 操作内存块的一组函数&#xff0c;它们可以对内存进行复制、移动、设置和比较等操作。这些函数主要在 <str…

Redis高可用-主从复制

这里写目录标题 Redis主从复制主从复制过程环境搭建从节点配置常见问题主从模式缺点 Redis主从复制 虽然 Redis 可以实现单机的数据持久化&#xff0c;但无论是 RDB 也好或者 AOF 也好&#xff0c;都解决不了单点宕机问题&#xff0c;即一旦 redis 服务器本身出现系统故障、硬…

NVR设备ONVIF接入平台EasyCVR视频融合平台社会面视频资源接入视频专网,应该如何处理?

在数字化时代&#xff0c;视频监控系统已成为社会安全管理的重要组成部分。随着城市化进程的加速和信息技术的发展&#xff0c;如何有效整合和管理跨区域、跨行业的视频监控资源&#xff0c;成为了提升社会治理能力的关键。 EasyCVR视频融合云平台&#xff0c;作为TSINGSEE青犀…

通过全球最前沿的技术解决视频拼接中时延带来的的应用缺陷,使得全景视频拼接能够真正得以大范围使用和推广的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。通过计算机视觉和…

推荐一款好用的postman替代工具2024

Apifox 是国内团队自主研发的 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;是非常好的一款 postman 替代工具。 它通过一套系统、一份数据&#xff0c;解决多个系统之间的数据同步问题。只要定义好接口文档&#xff0c;接口调试、数据 Mock、接口…

java作业项目以及azkaban的操作

参考内容&#xff1a; azkaban简介及azkaban部署、原理和使用介绍 1.在azkaban创建project 2.上传flow文件和project文件的压缩包 flow文件内容: nodes:- name: Testtype: commandconfig:command: java -jar /data/job/mtm-job-0.0.1-SNAPSHOT.jar --spring.profiles.activ…

【重生之我要苦学C语言】深入理解指针5

深入理解指针5 回调函数 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针(地址)作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;被调用的函数就是回调函数 回调函数不是由该函数的实现方直接调用&#xff0c;而是在特定的…

IOPaint模型部署教程

一、介绍 IOPaint是一款功能全面且强大的AI图像处理工具&#xff0c;它不仅免费开源&#xff0c;还由SOTA&#xff08;State-of-the-Art&#xff0c;即最先进&#xff09;AI模型驱动&#xff0c;为图像编辑和修复带来了前所未有的便利和高效。以下是对IOPaint的详细介绍&#…

吊打面试官系列:hashCode() 相同,equals() 就一定相等吗?

在编程的世界里&#xff0c;hashCode() 和 equals() 是一对形影不离的好兄弟。它们在Java中定义于Object类中&#xff0c;是每个Java对象都继承的两个方法。但是&#xff0c;如果你认为只要两个对象的hashCode()相同&#xff0c;它们的equals()就一定相等&#xff0c;那你就大错…

阿托伐他汀降脂疗效与安全性真实世界数据整理!

2024年9月&#xff0c;《中国医疗保险》杂志发布了题为《阿托伐他汀仿制药治疗高脂血症疗效与安全性的多中心回顾性队列研究》的重要研究结果。该研究由首都医科大学宣武医院牵头&#xff0c;联合上海交通大学医学院附属瑞金医院、吉林大学第一医院等10家国内顶尖三甲医院共同完…

深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅

​​​​​​​ &#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承基类成员访问⽅式的变化 继承类模板 基类和派⽣类间的转换 继承中的作⽤域 隐藏规则 成员函数的隐藏 考察继承【作⽤…

“嵌入”在大语言模型中是解决把句子转换成向量表示的技术

上一篇&#xff1a;《人工智能是这样理解“情绪”的》 序言&#xff1a;这段话要优化吗&#xff1f;““嵌入”是一种将句子、单词或其他语言单位转换为向量表示的技术。这个向量通常位于高维空间中&#xff0c;它以一种能够表达相似性的方式编码出文本的含义或上下文。嵌入层…

操作系统——内存分区管理

本章主要讨论为什么要给内存进行划分和如何划分的问题。 为了给每一个进程都分配一个大小合适的内存块 以连续存储进程的程序和数据&#xff0c;使得各进程可以并发执行 目录 一、内存的划分方法 1、固定分区法 2、动态分区法 3、动态分区的数据管理结构 二、分区的分配与回…

ML 系列: 第 24 节 — 离散概率分布(泊松分布)

目录 一、说明 二、固定时间间隔示例 三、固定间隔的示例 四、泊松分布的主要特征 五、示例 5.1 平均客户数的计算&#xff1a; 5.2 用于计算和绘制泊松分布的 Python 代码&#xff1a; 一、说明 泊松概率分布是一种离散概率分布&#xff0c;它表示在固定的时间或空间间隔内发生…

【comfyui教程】如何用 ComfyUI 修复和上色老照片?详细教程让老照片焕发新生

前言 如何用 ComfyUI 修复和上色老照片&#xff1f;详细教程让老照片焕发新生 老照片承载着无数回忆&#xff0c;可时光不饶人&#xff0c;随着岁月流逝&#xff0c;它们渐渐变得模糊、泛黄&#xff0c;甚至出现了褪色、裂痕。对于想要留住这份珍贵记忆的人来说&#xff0c;修…

ThinkServer SR658H V2服务器BMC做raid与装系统

目录 前提准备 一. 给磁盘做raid 二. 安装系统 前提准备 磁盘和系统BMC地址都已经准备好&#xff0c;可正常使用。 例&#xff1a; 设备BMC地址&#xff1a;10.99.240.196 一. 给磁盘做raid 要求&#xff1a; 1. 将两个894G的磁盘做成raid1 2. 将两块14902G的磁盘各自做…

BUUCTF pwn2_sctf_2016 int 0x80方法

本文目的 BUUCTF的PWN的第一页的pwn2_sctf_2016的libc不适用辣&#xff0c;但网上一搜全是libc 然后怎么办嘞&#xff0c;都明摆着有个int 0x80&#xff0c;当然是用啊 所以水一篇 早上中午晚上好 老三样&#xff0c;下载程序&#xff0c;打开ida&#xff0c;拖进去 一眼好几…

如何构建一个功能强大的低代码平台网站?关键步骤与技巧全解析

随着数字化转型的加速&#xff0c;企业对敏捷开发和快速迭代的需求越来越迫切。低代码平台应运而生&#xff0c;成为连接业务需求和技术实现的重要桥梁。低代码平台不仅能够大幅降低技术门槛&#xff0c;还能够通过可视化界面和预配置组件简化开发流程&#xff0c;帮助企业快速…