操作符讲解1---C语言

news2024/11/24 2:51:59

目录

前言:

1.什么是操作符

2.算术操作符

3.移位操作符

4.位操作符

5.逻辑操作符

5.1逻辑与

5.2逻辑或

5.3练习

5.4逻辑非


前言:

  博主这几天都在积累知识,俗话说:”只有多输入才能有输出”。在写博客之前,也是要沉淀的嘛(当然有不排除博主有点累想休息会,呜呜),为了不辜负志同道合的同志们的期望,我又来啦!

1.什么是操作符

  在讲各种操作符之前,可以先了解一下什么是操作符,操作符是干什么的等一系列问题。

  其实操作符就是对数据进行相应的运算操作,是C语言固定下来的一套语法。比如这里的+、*是算术操作符,sizeof()是单目操作符等还有一系列操作符,我们接着往下看吧!

2.算术操作符

  算术操作符有:+、-、*、/、%

  相信大家对加法、减法、乘法、除法都不陌生,而对%(取模)操作符感到不知所措,乍一看,脱口而出可能就是百分号,实际不是,请听我娓娓道来~

/(除号)得到被除数与除数的商
%(取模)

得到被除数与除数的余

  在进行除法运算的时候,有分以下两种情况: 

  • 整数除法

由于整数除法得到的是表达式的商,所以a/b得到的结果是3

  • 小数除法

  上面的整数除法并没说得到的结果是3.33333...,而是只得到3,这是因为/两边的操作数(操作符操作的数据)都是整型,所以它只保留除后的商的整数部分小数除法就不一样了,得到的商在数值上就是数学意义上的值,并且没有说只保留商2.500000的整数部分2

  总结:除法中,除数不能是0,计算机没有对这种做法进行定义/得到的是商;/的左右操作数中,只要有一个是小数(浮点数),除法进行的就是小数除法,在数值上与数学一致

  取模%操作符

  取模操作得到的是余数,10除以3商3余1,由于进行的取模运算,得到的结果是1

  总结:取模运算可以这样理解,仍旧是对两个操作数进行除法运算,然后取余数注意一点的是,不能对浮点数进行取模运算取模运算的除数不能为0(因为取模本质上还是除法,只是结果取值的方向而已)

3.移位操作符

  移位操作符(左移操作符<<、右移操作符>>)用于对整数的二进制位进行移位操作,我们直接看代码:

  首先我们看到输出结果:我们用n>>1给m初始化,在后面打印n的时候,n还是4没有变,所以n进行右移操作后,并不会影响n本身(也就是没有把n改成2)但如果右移的结果赋值给n,那就会改变了,比如 n = n >> 1;

  右移操作丢弃掉右边越界的一位,补上左边空缺的一位,补位分两种: 

  1. 算术右移的补位:算术右移在左边补上的是有符号数的符号位。
  2. 逻辑右移的补位:逻辑右移在左边统一补上0。

  一般编译器采取的是算术右移的补位机制,请看下面代码:

  如果我们这里进行的逻辑右移,那么将会得到一个很大的数字。

  补充:算术右移后的那一串二级制还是补码,为什么呢?因为移位操作符是对整数的补码进行移位的还有在打印的时候,需要把补码逆着求原码

  规律右移一位得到的结果是数值除以2,左移一位是乘以2假设现在有个0100(整型,前面的0都省略掉),数值是4。1所在的位置是2的2次方权重,当右移一位变成0010,权重变成了2的1次方,相当于除了个2

  注意一个整型有32位,那么最多只能移动31位,移动32位或更多是没有定义的行为不能移动浮点数,只能对整数进行移位移动的位数不能是负数,脑洞大开的人动了一下脑子写出:a >> -1,诶,右移负一位是不是就相当于左移1位,NO,这种行为没有被定义

4.位操作符

  位操作符有&(按位与)、|(按位或)、^(按位异或)3个操作符。话不多说,看代码:

  3和5的二进制分别简写成0011和1001,前面的28位都是0。

  • 按位与&:对应二进制位进行操作,只要有0,该二进制位最终就是0;只有全1,结果才为1

  • 按位或|:对应二进制位进行操作,只要有1,结果就是1;只有全0,结果才为0
  • 按位异或^:这个尖操作符不是数学中表示阶乘的那个符号,在计算机中是异或操作符。"同0异1",二进制位都为0或都为1,得到的结果是0;二进制位是0、1得到的结果是1

5.逻辑操作符

  逻辑操作符有三个&&(逻辑与)、||(逻辑或)、!(逻辑反)。它们针对的是结果的真和假!常被用在判断的条件中表示"并且"、"或者"、"非"。

5.1逻辑与

  逻辑与是并且的意思,只有当两个条件都满足时,结果才为真。字面理解,A并且B都完成它们的任务,这件事才能完成~

  为什么这里会打印出青年呢?这是由于在计算机中,想表达数学中一个连续区间,不能这样写,需要用到&&(并且)这个操作符这里能打印出来的原因是

  关系操作符(<)从左到右的操作步骤,后面也会讲关系操作符。

5.2逻辑或

  逻辑或是或者的意思,只要有一个条件达成,那么结果就为真。A或者B完成任务,这个任务就完成了~

  a<20成立,||(或者)只要两边有一个条件成立,该判断条件的结果就是真。

5.3练习

1.打印出1000-2000之间为闰年的年份

  ==关系操作符使用来判断相等的,我们在这里提前看到了!(逻辑反)是的,它其实就是进行一种相反的操作,!=是判断不等于的关系操作符

2.判断年龄

5.4逻辑非

  !感叹号在计算机中表示的是逻辑非,它可以把真的变成假,假的变成真在计算机中,非0为真,如果非0值前面加上!,结果就是假,值为0如果给0加上感叹号,结果变为真,默认的表示真的数值是1

  以上就是三个逻辑表达式的基本内容啦。接下来还有关于逻辑与和逻辑或控制表达式求值的补充知识点~

  我们知道逻辑与只要两边有一边出现了假,那结果一定为假,逻辑或只有一边出现了真,那结果一定为真我们还需要知道的一点是,计算机在执行逻辑与和逻辑或操作符的时候,确保先计算左操作数,再计算右操作数结合前面的两点,这两个逻辑操作符还有一个特性,那就是如果这个表达式在计算右边的操作数之前已经有确切的答案了,那么右边的表达式不会被执行

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 1;
	int c = 2;
	int d = a++ && ++b && c++;
	printf("%d %d %d %d", a, b, c, d);
	return 0;
}

  这道题的结果是多少,思考一会,好,我们看答案~

  因为a++,++是后置加加,a是先使用原先的值参与表达式求值运算,再自己增加1(自增)由于a原先的值是0,而且是&&逻辑与操作符,左边的操作数为假,右边的++b,c++都没能执行,就结束了,表达式的结果为0,故d里存放的值是0

  若换成逻辑或呢?我们依旧分析,a++使用的是0,结果还不确定执行++b,++是前置加加,b本来是1,先自增成2,再用来参与表达式求值,由于是||逻辑或,出现了操作数为真,结果肯定为真,表达式的结果为1,故d里的值为1。c++就没有被执行了。最后的结果就是:1 2 2 1。

  总结逻辑与就是并且、逻辑或就是或者、逻辑非就是非,&&和||对表达式求值有控制效果,术语叫做短路求值,&&当出现假时,停止运算;||当出现真时,停止运算

  好啦~,这篇字数挺多了,分成两篇学习操作符吧~。


结语:希望读者读完能有所收获!对C语言操作符有进一步的认识!✔

  读者对本文不理解的地方,或是发现文章内容上有误等,请在下方评论留言告诉博主哟~,也可以对博主提出一些文章改进的建议,感激不尽!最后的最后!

  ❤求点赞,求关注,你的点赞是我更新的动力,一起进步吧。

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

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

相关文章

一文1000字从0到1实现Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具&#xff0c;可以去 github 下载最新版&#xff1a;https://github.com/allure-framework/allure2/releases 2、解压到本地 3、配置环境变量 复制路径如&#xff1a;F:\allure-2.13.7\bin 环境变量、Path、添加 F:\…

【硬核】C语言指针是什么?深入浅出带你掌握C语言指针!

指针与底层硬件联系紧密&#xff0c;使用指针可操作数据的地址&#xff0c;实现数据的间接访问&#xff0c;本文章内容如下 1、C语言指针的作用 2、计算机的存储机制 3、如何定义指针 4、如何操作指针 5、数组与指针的关系 6、指针使用中的一些注意事项 1、C语言指针有什么作用…

企业级架构设计原则(含架构管理原则、业务架构设计原则、应用架构设计原则、数据架构设计原则、技术架构设计原则)

Togaf中的架构原则是一组用于指导企业架构设计和决策的基本准则。这些原则旨在支持组织的目标、价值观和战略&#xff0c;并提供一致性、可持续性和可扩展性的架构方案。 Togaf中提供了一些常见的架构原则&#xff0c;比如&#xff1a;保持一致性&#xff1a;确保架构与组织的目…

MySQL 性能调优及生产实战篇(二)

前言数据结构HASHBinary Search Trees、AVL TreesRed/Black TreesB TreesB Trees 数据存储InnoDBMyISAM 索引优化索引匹配方式哈希索引组合索引聚簇、非聚簇索引覆盖索引 优化细节&#xff08;important&#xff09;数据库勿做计算尽量主键查询前缀索引索引扫描排序子查询范围列…

干货满满---90条简单实用的Python编程技巧

对于Python&#xff0c;想必大家都不陌生&#xff0c;自从它问世以来得到了广大编程爱好者的追捧和喜爱&#xff0c;但是再好的东西都需要讲究技巧和策略方法&#xff0c;才能达到事半功倍的效果&#xff0c;下面是我近几年的学习心得和总结&#xff0c;希望能对大家带来一定帮…

不懂就要问,现在的物联卡还有人用吗?

很多朋友私信小编&#xff0c;现在的物联卡还能买吗&#xff1f; 当然&#xff0c;对于企业设备来讲&#xff0c;物联卡是一直可以使用的&#xff0c;而且非常稳定。 如果是用在个人手机上面&#xff0c;可以说也是可以用的&#xff0c;只不过是使用时间长短的问题。 ​ 下面…

ChatGPT为企业应用赋能

chatgpt-on-wechat和bot-on-anything两个项目都支持企业微信部署&#xff0c;其中前者功能比较丰富&#xff0c;推荐&#xff01; 如需帮助&#xff0c;可以搜索wx&#xff1a;Youngerer 找到我&#xff01; 功能展示&#xff1a; ![在这里插入图片描述](https://img-blog.csd…

【Linux升级之路】3_Linux进程概念

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux升级之路】 ✒️✒️本篇内容&#xff1a;认识冯诺依曼系统&#xff0c;操作系统概念与定位&#xff0c;深入理解进程概念&#xff08;了解PCB&…

C语言函数大全-- m 开头的函数(2)

C语言函数大全 本篇介绍C语言函数大全-- m 开头的函数 1. mkdirat 1.1 函数说明 函数声明函数功能int mkdirat(int dirfd, const char *pathname, mode_t mode);它是一个 Linux 系统下的系统调用函数&#xff0c;用于在指定目录下创建新的子目录 参数&#xff1a; dirfd &a…

推荐一个一键AI抠图网站

一键去除图片背景 在这个数字化的世界里&#xff0c;我们经常需要处理各种图片&#xff0c;无论是用于个人的社交媒体&#xff0c;还是用于商业的广告设计。 然而&#xff0c;图片处理往往需要专业的技能和复杂的软件&#xff0c;这对许多人来说可能是个挑战。但现在&#xf…

3. Python字符串

文章目录 一、修改字符串大小写1.1 将字符串中每个单词的首字母改为大写1.2 将字符串中所有的字母改为大写1.3 将字符串中所有的字母改为小写 二、拼接字符串三、添加空白3.1 使用制表符添加空白3.2 使用换行符添加空白3.3 制表符和换行符同时使用 四、删除空白4.1 仅去掉字符串…

redis单机安装

1. 安装gcc 2.下载并编译redis wget http://download.redis.io/releases/redis-7.0.4.tar.gz 直接下载到虚拟机中解压 编译 安装redis 执行命令&#xff1a; make install PREFIX/usr/local/redis/ &#xff0c;会将redis安装到指定目录下,在这个目录下会生产bin目录 在安…

《花雕学AI》人类推理能力对AI来说是什么?用ChatGPT来检验一下

”这里有一本书、九个鸡蛋、一台笔记本电脑、一个瓶子和一个钉子&#xff0c;请告诉我如何把它们稳定地堆叠在一起&#xff1f;“ 这是去年提出的一道测试推理能力的题目&#xff0c;当微软的计算机科学家开始试验一种新的AI系统时&#xff0c;他们要求AI解决这个难题&#xf…

【Java 并发编程】CAS 原理解析

CAS 原理解析 1. 什么是 CAS&#xff1f;1.1 悲观锁与乐观锁1.2 CAS 是什么&#xff1f; 2. CAS 核心源码3. CAS 实现原子操作的三大问题3.1 ABA 问题3.2 循环性能开销3.3 只能保证一个变量的原子操作 4. synchronized、volatile、CAS 比较 1. 什么是 CAS&#xff1f; 1.1 悲观…

物业企业多种类型合同,用泛微今承达实现统一数字化管理

随着物业业务的不断发展&#xff0c;物业服务越来越精细化、专业化&#xff0c;旨在为居民社区提供更便利的服务。 物业企业提供多种形态、全方位、立体式的综合服务&#xff0c;包括基础物业服务、业主增值服务(空间运营收入、房屋经纪、电商服务、社区金融、家政服务及养老服…

手撕-扫雷

一、前言-认识扫雷 二、打印菜单 三、创建棋盘并初始化 四、打印棋盘 五、布置雷 六、排查雷&#xff08;统计坐标周围雷的个数&#xff09; 七、扫雷代码全析&#xff08;game.h game.c test.c&#xff09; 铁汁们&#xff0c;今天给大家分享一篇扫雷游戏的实现&#…

Python快速批量修改图片尺寸

之前我们写过快速批量获取图片的大小&#xff0c;该文章链接在这里&#xff1a;Python每日一个知识点9----批量输出图片尺寸 今天我们分享一个快速批量修改图片尺寸的小脚本&#xff0c;我们一下看一下 先看一下目录结构&#xff1a; 文件夹&#xff1a;【原始图片】&#xf…

在阿里做了6年软件测试,4月无情被辞,想给划水的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入阿里&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是6年的工作经验吧。 这6年之间完成了一次…

RabbitMQ 运维备忘录(一)

文章目录 1. 基础信息参考一些官方的链接单节点安装 RabbitMQ开启 web 端管理界面 2. 一些基本操作应用管理服务端口开放信息用户管理虚拟主机 vhost 管理web 界面管理队列信息查询交换器信息查询绑定关系的信息查询TCP/IP 连接信息查询信道信息查询消费者信息查询服务状态查询…

英伟达开放BEVFusion部署源代码,边缘端实时运行(高达25FPS)

以下文章来源于微信公众号&#xff1a;集智书童 链接&#xff1a;https://mp.weixin.qq.com/s/6BWohe2FxRN8E-yyp_32fg 本文仅用于学术分享&#xff0c;如有侵权&#xff0c;请联系后台作删文处理 引言&#xff1a; 众所周知&#xff0c;雷达与相机的融合方案由于稀疏卷积的原…