C语言学习及复习笔记-【5】C 运算符
文章目录
- 5. C 运算符
- 5.1 关系运算符
- 5.2 逻辑运算符
- 5.3 位运算符
- 5.4 杂项运算符 ↦ sizeof & 三元
- 5.5 例子
- 1). 利用异或 ^ 来交换两个数的值,而且不引入其他变量。
- 2). 利用位与 & 运算,判断一个整数是否是2的整数次幂。
- 3). 不同长度的数据进行位运算
- 4).运算符优先级:
5. C 运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。
C 语言内置了丰富的运算符,并提供了以下类型的运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
5.1 关系运算符
下表显示了 C 语言支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
| 运算符 | 描述 | 实例 |
|---|---|---|
| == | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
| != | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
| > | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
| < | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
| >= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
| <= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
5.2 逻辑运算符
下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:
| 运算符 | 描述 | 实例 |
|---|---|---|
| && | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 |
| || | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真。 |
| ! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 |
5.3 位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101\\-----------------
A&B = 0000 1100 //12
A|B = 0011 1101 //61
A^B = 0011 0001 //49
~A = 1100 0011 //-61
A << 2 //左边的二进制位丢弃,右边补0,将得到 240,即为 1111 0000
A >> 2 //正数左补0,负数左补1,右边丢弃,将得到 15,即为 0000 1111
5.4 杂项运算符 ↦ sizeof & 三元
下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof 和 ? :。
| 运算符 | 描述 | 实例 |
|---|---|---|
| sizeof() | 返回变量的大小。 | sizeof(a) 将返回 4,其中 a 是整数。 |
| & | 返回变量的地址。 | &a; 将给出变量的实际地址。 |
| * | 指向一个变量。 | *a; 将指向一个变量。 |
| ? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |
5.5 例子
1). 利用异或 ^ 来交换两个数的值,而且不引入其他变量。
实例
#include<stdio.h>int main( )
{unsigned int a=60; //0011 1100unsigned int b=13; //0000 1101printf("a=%d,b=%d",a,b); //输出a,b的值printf("\n");a=a^b; //a=a^b=0011 0001b=a^b; //b=a^b=0011 1100 相当于b1=(a^b)^ba=a^b; //a=a^b=0000 1101 相当于a1=(a^b)^((a^b)^b)printf("a=%d,b=%d",a,b); //输出a,b的值
}
结果:
a=60,b=13;
a=13,b=60;
2). 利用位与 & 运算,判断一个整数是否是2的整数次幂。
二进制数的位权是以2为底的幂,如果一个整数 m 是 2 的 n 次幂,那么转换为二进制之后只有最高位为 1,其余位置为 0,再观察 m-1 转换为二进制后的形式以及 m&(m-1) 的结果,例如:
2 --> 0000 0010 1 --> 0000 0001 2&1 --> 0000 0010 & 0000 0001 = 0
4 --> 0000 0100 3 --> 0000 0011 4&3 --> 0000 0100 & 0000 0011 = 0
8 --> 0000 1000 7 --> 0000 0111 8&7 --> 0000 1000 & 0000 0111 = 0
可以看出所有的 1 完美的错过了,根据位与的特点可知 m&(m-1) 的结果为 0。
如果整数 m 不是 2 的 n 次幂,结果会怎样呢?例如 m=9 时:
9 --> 0000 1001 8 --> 0000 1000 9&8 --> 0000 1001 & 0000 1000 != 0
利用这一特点,即可判断一个整数是否是2的整数次幂。
》示例:
int func(int num){return ((num > 0) && ((num & (num - 1)) == 0));//2的n次幂时,返回true
}
#include <stdio.h>int num;//global variable
int func(int num){if ((num>0)&&(num&(num-1))==0)){//2的n次幂时,判断条件为1;否则为0.printf("%d是2的整数次幂",num);}else{printf("%d不是2的整数次幂",num);}return((num>0)&&(num&(num-1))==0);
}int main(){printf("请输入要查询的数\n");scanf("%d",&num);func(num);return 0;
}
3). 不同长度的数据进行位运算
如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。
以“与”运算为例说明如下:我们知道在 C 语言中 long 型占 4 个字节(似乎比int大),int 型占 4 个字节,如果一个 long 型数据与一个 int 型数据进行“与”运算,右端对齐后,左边不足的位依下面三种情况补足:
- (1)如果整型数据为正数,左边补 16 个 0。
- (2)如果整型数据为负数,左边补 16 个 1。
- (3)如果整形数据为无符号数,左边也补 16 个 0。
如:long a=123; int b=1; 计算 a & b。 -----------------1
如:long a=123; int b=-1; 计算 a & b。 -----------------123
如:long a=123; unsigned int b=1; 计算 a & b。-------1
4).运算符优先级:
括号成员是老大; // 括号运算符 []() 成员运算符. ->
全体单目排老二; // 所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&
乘除余三,加减四; // 这个"余"是指取余运算即%,* /
移位五,关系六; // 移位运算符:<< >> ,关系:> < >= <= 等
等与不等排行七; // 即 == 和 !=
位与异或和位或; // 这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十; 逻辑与,逻辑或; // 逻辑运算符: || 和 &&
十一十二紧挨着; // 注意顺序: 优先级(||) 底于 优先级(&&)
条件只比赋值高, // 三目运算符(?:)优先级排到 13 位只比赋值运算符和 "," 高
逗号运算最低级! //逗号运算符优先级最低
相关文章:
C语言学习及复习笔记-【5】C 运算符
文章目录5. C 运算符5.1 关系运算符5.2 逻辑运算符5.3 位运算符5.4 杂项运算符 ↦ sizeof & 三元5.5 例子1). 利用异或 ^ 来交换两个数的值,而且不引入其他变量。2). 利用位与 & 运算,判断一个整数是否是2的整数次幂。3). 不同长度的数据进行位运…...
数仓、数据湖、湖仓一体、数据网格
第一代:数据仓库 定义 为解决数据库面对数据分析的不足,孕育出新一类产品数据仓库。数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策和信息的全局共享。 数…...
C语言【atoi函数】
C语言【atoi函数】🫅系统atoi函数🫅 模拟实现atoi函数看到atoi函数,有人又会问有这个函数,我怎么没用过。那就说明:不是你刷题太少,就是atoi函数存在感太低。 这篇函数就带你领略atoi函数的魅力 Ǻ…...
一起学习用Verilog在FPGA上实现CNN----(八)integrationFC设计
1 integrationFC设计 LeNet-5网络结构全连接部分如图所示,该部分有2个全连接层,1个TanH激活层,1个SoftMax激活层: 图片来自附带的技术文档《Hardware Documentation》 integrationFC部分原理图,如图所示,…...
面试题总结
1.js的数据类型 分为基本数据类型和引用数据类型。 基本数据类型 ES5的5种:Null,undefined,Boolean,Number,String, ES6新增:Symbol表示独一无二的值 ES10新增:BigInt 表示任意大的…...
go进阶(1) -深入理解goroutine并发运行机制
并发指的是同时进行多个任务的程序,Web处理请求,读写处理操作,I/O操作都可以充分利用并发增长处理速度,随着网络的普及,并发操作逐渐不可或缺 一、goroutine简述 在Golang中一个goroutines就是一个执行单元ÿ…...
mongodb 操作记录
#启动服务 net start MongoDB #停止服务 net stop MongoDB #进入mongo shell 方式 mongo db #查看当前数据库是那个 #插入一条数据 db.runoob.insert({x:10}) #查找数据 db.runoob.find() 查询所有的数据库 show dbs #连接mongodb mongodb://[username:password]host1[:po…...
JDBC简单的示例
JDBC 编程步骤 加载驱动程序: Class.forName(driverClass) //加载MySql驱动 Class.forName("com.mysql.jdbc.Driver") //加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver")获得数据库连接: DriverManager.getCon…...
Spring架构篇--2.3 远程通信基础--IO多路复用select,poll,epoll模型
前言:对于传统的BIO(同步阻塞)模型,当有客户端连接达到服务端,服务端在对改连接进行连接建立,和数据传输过程中,是无法响应其他客户端的,只有当服务端完成对一个客户端处理后&#x…...
python--matplotlib(4)
前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制作的图形达到出版级的标准。 其他matplotlib文章 python--matpl…...
【项目精选】城市公交查询系统(论文+视频+源码)
点击下载源码 1.1 选题背景 随着低碳生活的普及,人们更倾向于低碳环保的出行方式,完善公交系统无疑具有重要意义。公交是居民日常生活中最常使用的交通工具之一,伴随着我国经济繁荣和城市人口增长,出行工具的选择也变得越来越重要…...
less、sass、webpack(前端工程化)
目录 一、Less 1.配置less环境 1.先要安装node:在cmd中:node -v检查是否安装node 2.安装less :cnpm install -g less 3.检查less是否安装成功:lessc -v 4.安装成功后,在工作区创建xx.less文件 5.在控制台编译less,命令&…...
解析Java中的class文件
解析class文件需要把class文件当成文件流来处理,定义ClassReader结构体 type ClassReader struct {data []byte }go语言中的reslice语法可以跳过已经读过的数据。 同时定义了ClassFile数据结构来描述class文件的各个部分,该数据结构如下所示࿱…...
直播预告 | 企业如何轻松完成数据治理?火山引擎 DataLeap 给你一份实战攻略!
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 企业数字化转型正席卷全球,这不仅是趋势所在,也是企业发展必然面对的考题,也是企业最关心、最难决策的难题,数字化不…...
华为OD机试真题Python实现【 磁盘容量】真题+解题思路+代码(20222023)
磁盘容量 题目 磁盘的容量单位常用的有M、G、T 他们之间的换算关系为1T =1024G,1G=1024M 现在给定n块磁盘的容量,请对他们按从小到大的顺序进行稳定排序 例如给定5块盘的容量 5 1T 20M 3G 10G6T 3M12G9M 排序后的结果为 20M 3G 3M12G9M 1T 10G6T 注意单位可以重复出现 上述…...
php调试配置
错误信息输出 错误日志 nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog。原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出࿰…...
Spring架构篇--1 项目演化过程
前言:如今spring微服务以其灵活开发易于维护已基本占领开发占地,项目从一开始并不是这种服务的拆分,是一步步演变成现在的架构; 项目演化之路: 1 单体架构:开发和运维都较简单: 单体架构&am…...
华为OD机试真题Python实现【斗地主 2】真题+解题思路+代码(20222023)
斗地主 2 题目描述 在斗地主扑克牌游戏中,扑克牌由小到大的顺序为3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有,单张,对子,顺子,飞机,炸弹等 其中顺子的出牌规则为,由至少 5 张由小到大连续递增的扑克牌组成 且不能包含2 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,1…...
Intel SIMD: AVX2
AVX2 资料: Intel 内部指令 — AVX和AVX2学习笔记Intel Intrinsics — AVX & AVX2 Learning NotesModule x86 AVX 向量寄存器有三种: 128-bit (XMM forms),AVX2 支持,符号 __m128, __m128d, __m128i256-bit (YMM forms)&a…...
Spring Cloud Nacos源码讲解(二)- Nacos客户端服务注册源码分析
Nacos客户端服务注册源码分析 服务注册信息 我们从Nacos-Client开始说起,那么说到客户端就涉及到服务注册,我们先了解一下Nacos客户端都会将什么信息传递给服务器,我们直接从Nacos Client项目的NamingTest说起 public class NamingTest…...
手把手教你用Wireshark抓包分析Opener EIP通信,快速定位ForwardOpen失败原因
深度解析EtherNet/IP通信:用Wireshark诊断ForwardOpen失败的实战指南 当你在MCU上成功移植了Opener协议栈,TCP连接建立正常,却在关键时刻遭遇ForwardOpen失败时,那种挫败感我深有体会。去年在汽车生产线控制系统项目中,…...
OpenClaw自动化测试实践:GLM-4.7-Flash驱动脚本执行与结果分析
OpenClaw自动化测试实践:GLM-4.7-Flash驱动脚本执行与结果分析 1. 为什么选择OpenClaw做测试自动化? 上个月接手一个新项目时,我遇到了一个典型的技术矛盾:作为独立开发者,既需要保证代码质量,又没精力手…...
开源OFA模型多场景落地:新闻图库自动配文、政府信息公开图片无障碍描述生成
开源OFA模型多场景落地:新闻图库自动配文、政府信息公开图片无障碍描述生成 1. 项目概述:让图片会说话的智能助手 你有没有遇到过这样的情况:看着一张图片,却不知道该怎么用文字描述它?或者需要为大量图片手动添加文…...
告别TeamViewer!用RustDesk自建服务器实现跨平台远程控制(Windows/Ubuntu客户端全配置)
告别商业远程控制软件:用RustDesk自建服务器全流程指南 远程控制软件已经成为现代工作场景中不可或缺的工具,无论是技术支持、远程办公还是跨设备协作,一个稳定高效的远程连接方案都能极大提升工作效率。然而,商业软件如TeamViewe…...
无GPU方案:星图平台OpenClaw镜像+百川2-13B-4bits的云端沙盒体验
无GPU方案:星图平台OpenClaw镜像百川2-13B-4bits的云端沙盒体验 1. 为什么选择云端沙盒方案 作为一个长期折腾本地AI部署的技术爱好者,我最近遇到了一个典型困境:想体验最新的OpenClaw智能体框架,但手头的MacBook Pro只有集成显…...
告别沉闷AI工具:像素时装锻造坊带你体验RPG游戏式图像生成
告别沉闷AI工具:像素时装锻造坊带你体验RPG游戏式图像生成 1. 引言:当AI图像生成遇上复古RPG 你是否厌倦了传统AI工具单调的黑色界面和机械化的操作流程?像素时装锻造坊(Pixel Fashion Atelier)彻底改变了这一现状。…...
AI 创作者指南:09.AI 作为你的创作运营助理
第 9 篇 AI 作为你的创作运营助理 多模态魔法刚玩完,你现在一篇文章能变10种形态,是不是已经觉得内容像会“分身术”了?😊 来,第三部分继续!第9篇——AI 作为你的创作运营助理。 以前你自己盯排期、想矩阵、试标题,累得像管家婆。现在AI直接当你的“运营小秘书”,帮你…...
高效音频获取与资源管理:喜马拉雅下载工具全解析
高效音频获取与资源管理:喜马拉雅下载工具全解析 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字内容消费时代&a…...
Node.js全栈项目集成Wan2.1-UMT5:实时视频生成进度推送
Node.js全栈项目集成Wan2.1-UMT5:实时视频生成进度推送 最近在做一个挺有意思的项目,需要把Wan2.1-UMT5这个视频生成模型集成到我们自己的系统里。用户上传一段文字描述,系统就能生成一段短视频。听起来挺酷,对吧?但问…...
别再只用四线制SPI了!用菊花链连接多个传感器,Arduino引脚不够的救星
菊花链SPI:突破Arduino引脚限制的多传感器连接方案 当你在智能温室项目中需要同时监测温度、湿度和光照强度,却发现Arduino Uno的GPIO引脚已经捉襟见肘时,传统四线制SPI的局限性就暴露无遗。每个新增的传感器都意味着多占用一个宝贵的片选引…...
