C语言之操作符详解

news2024/11/18 16:39:26

本章重点

1. 各种操作符的介绍

2. 表达式求值

给大家提到一些操作符,下面我们来给大家详细介绍

首先看算术操作符,其他几个都没什么可讲的我们来重点看一下/(除法)

整数除法(除号的两端都是整数)

浮点数除法(除号的两端只要有一个小数就执行小数除法),我们依然用我们的VS2019给大家进行演示

整数除法(7  /  2)无法打印3.5,改成double类型也是不能的 

那么如果我们想要得到小数呢,我们看代码

我们根据浮点数除法概念,除号两边只需一个小数就打印小数 

这里强调一点:在除法中,除数不可以为0

接着我们来看%算术运算符

%---得到的是整除后的余数

画重点

这里需注意的是%取模操作符的两个操作数必须都是整数,如果大家不相信,我们来看代码验证一下

接下来我们看移位操作符

注意:这里移动的是二进制

在我们最开始接触计算机的时候,计算机能够处理的是二进制的信息

比如15--10进制数,需将其转化为计算机能够识别的二进制序列

下面我们来看代码

 

整数的二进制表示形式有三种:原码,反码,补码

1.正整数的原码,反码,补码都是相同的

2.负整数的原码,反码,补码是需要通过计算得到的

首先不管是正整数还是负整数,都可以写出二进制原码

1.根据正负直接写出的二进制序列就是原码 

例如

15的二进制序列是1111,有的同学不理解,这里给大家解释一下,二进制每一位都是有自己的权重的,10进制每一位也都是有自己的权重的,例如十进制数123,下面给大家画图讲解

十进制大家如果清楚了那我们的二进制的,还是用15的例子,大家看图

加起来正好等于15 

在举个例子,大家尝试着自己去动手操作一下,比如24的二进制序列是多少,大家先自己操作一下,再看我给大家的答案

1个整型是4个字节=32个比特位,用15这个例子,那么15的二进制序列就为00000000000000000000000000001111,注意最前面的那个0是符号位,符号位为0表示整数,符号位位1表示负数

-15的二进制序列就是把符号位改为1即可 

我们再来看代码,我在代码后面给大家详细注释了每一步的意思,希望大家能看懂

正整数的原码,反码,补码都是相同的

负整数的原码,反码,补码是需要计算的 

这里给大家详细讲解一下负整数的原码,反码,补码的计算

负整数的反码(原码符号位不变,其他位按位取反得到反码)

负整数的补码(负整数的反码+1得到补码)

希望大家能理解

另外大家特别注意,整数在内存中的存储存储的是补码计算的时候也是使用补码计算的,这个知识在我们数据在内存中的存储这两个博客中会用到,大家可在此多停留一会儿思考一下

现在给大家讲解一下左移和右移运算符

右移:

算术右移(右边丢弃,左边补原来的符号位)

逻辑右移(右边丢弃,左边直接补0)

C语言本身没有明确规定到底是算术右移还是逻辑右移,一般编译器上采用的是算术右移

我们现在来看例子

画个图给大家理解一下

按照我上面给大家的讲解理解起来就比较容易

这里就稍微复杂一点了,前面我们说整数在内存中的存储是补码,计算时也是使用补码进行计算的

下图代码就是一个很好的例子,利用a的补码进行计算求出b的原码,这是我反着来,补码-1得到反码,然后符号位不变,其他位按位取反得到b的原码,希望大家能够理解

那么左移呢???看下图

注意,一再强调,计算时是利用补码进行计算的,大家务必注意并且移位操作符中的操作数只适用于正整数,比如a>>-1就不可取(标准未定义行为),希望大家能够理解

下一个知识点

给大家上代码来理解 

&---对应二进制位有0则为0,两个同时为1,才是1

这里再次强调,计算时是用的补码,整数的原码,反码,补码相同,所以c(原码等于补码)的值为3

|---按(2进制)位或 - 对应的二进制位有1则为1,两个同时为0才是0

^----按二进制位异或 -对应的二进制位相同为0,相异为1

这里再教大家一个知识,我们脑袋中常规的C语言交换两个数的方法是定义一个中间变量进行交换,今天教给大家一个新方法,大家理解即可,我们看代码

这里需要给大家讲解一下异或操作符的规则

根据前面异或的规则大家再看我给大家的代码讲解和注释 ,上半部分代码是计算

下半部分代码是举例解释

给大家再画个图以便大家理解

这种方法很难想,同学们尝试着理解一下,不用一定掌握

来看下一个知识点

这个东西我们平时很常见,这里给大家一张图片自己理解一下,因为比较简单,我就不做详细讲解了

 

来看下一个知识点

单目操作符只有一个操作数

双目操作符有两个操作数

来看代码

+ - 号没什么好讲解的,大家直接看代码

我们来看&和*操作符,看代码,注意指针部分的初阶和进阶知识我们在后期会给大家详细讲解,这里大家简单看我代码后面的注释尝试着理解一下

这里给大家介绍一下sizeof

sizeof不是函数,而是操作符

sizeof计算的是类型创建变量的大小,单位是字节

我们来看代码

那我们要计算数组的大小呢,我们来看代码

去掉arr就是数组的类型,并且不能是int [5],结果是20,因为值计算了5个元素的大小,大家感兴趣的可以去研究一下

~ 操作符,我已经把代码给大家了,注释也给大家了 ,大家可以计算一下 

结果是-1,根据~的概念进行计算,先算出补码,然后根据补码按位取反,得到新的补码通过计算得到原码,希望大家能够理解

现在给大家一个例子,给大家一个应用,看代码

大家下来再VS2013,VS2019,VS2022上面自己实操一下,巩固一下知识

scanf读取失败就返回EOF,所以scanf还可以写成下面的模式,当你想要while循环停下来的时候按住control + z 即可

 还有一种形式,看代码,代码注释已经给大家了,我就不再做详细讲解了

--前置,后置--

++前置,后置++

我们来详细讲解

先将a=1的值赋给b,a=1的值再自增得到2

看下一个代码道理和上一个代码相同

这一个代码意思是先将a = 1加1,再赋值给b,b得到2,a = 2

看下一个代码

道理和上一个代码相同,希望大家能够理解

我们再看一个实例,大家自己思考一下,试运行得出结果

结果为

10

11

下一个知识点是强制类型转换

看代码就能够理解,看下面代码

下面给大家讲解关系操作符

这些操作符没什么可讲的,但是这些操作符只能应用到适合的类型上,比如比较操作符就不能应用于字符串的比较,希望大家能够理解

下一个知识点是逻辑操作符

逻辑与(并且) 

逻辑或(或者)

比如:老师:张三并且李四,来我办公室,张三和李四都来了,才能满是老师的要求,张三和李四只来一个或者都不来就不行

比如:老师:张三或者李四,来我的办公室,张三和李四都来可以,张三和李四来一个可以,张三和李四都不来就不行,希望大家能够理解

看看代码

按照我给大家举的生活实例就能够理解

下一个知识点

我们看代码 

a  >  5如果为真,就去 3 这个值,若为假就取 - 3 这个值

下一个知识点

逗号表达式特点:从左向右计算,整个表达式的结果是最后一个表达式的结果

下一个知识点 

下标引用操作符在数组的博客中已经讲过了,这里就不做过多讲解

注意printf函数后面的......是可变参数列表(参数的个数是可以变化的)的意思,不是汉语中的省略号的意思,大家有兴趣下来可以去探索一下

结构体类型已经在上图给大家讲清楚了,大家先尝试理解一下

我们看代码

第一种写法 

第二种写法(指针)

我们看代码

代码和注释给大家,大家自行看一看,理解起来还是比较简单的,如果在此之前有什么问题,可以在评论区提问或者私聊我,我会尽力给大家解决

本章终,有任何疑,评论区提问哈,谢谢大家的支持

 

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

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

相关文章

【漏洞复现】Apache RocketMQ 命令注入漏洞(CVE-2023-33246)

文章目录 前言声明一、漏洞描述二、漏洞危害三、影响版本四、环境搭建五、漏洞复现六、修复建议 前言 RocketMQ 是阿里巴巴在2012年开发的分布式消息中间件,专为万亿级超大规模的消息处理而设计,具有高吞吐量、低延迟、海量堆积、顺序收发等特点。同时它…

Shell脚本查询进程并kill进程(集群版)

记录:454 场景:使用Shell脚本查询进程并kill进程。使用Shell脚本远程执行脚本查询进程并kill进程。 版本:CentOS Linux release 7.9.2009。 1.使用Shell脚本查询进程并kill进程 1.1脚本 脚本名称:zk-kill_pid.sh 脚本内容&a…

从ROS1到ROS2无人机编程实战指南

亲爱的读者们,我今天非常荣幸地向大家推荐一本本人的全新力作——《从ROS1到ROS2无人机编程实战指南》。这本书站在初学者的角度,从入门到进阶,再到实战,循序渐进,是学习ROS1和ROS2的最佳选择。如今已在全国范围内上市…

Java spring boot 全解Camunda 7,从 0 到 1 构建工作流平台——第一节:各个开源框架对比

目录 1. Camunda 介绍2. Camunda 选型说明2.1 osworkflow2.2 jbpm2.3 ActivitiActiviti介绍各个版本的优缺点 2.4 flowable2.5 camundacamunda介绍主流版本介绍 2.6 n8n.io2.7 为什么选 camunda ? camunda7.x 还是 camunda 8.x ?为什么选 camunda?camun…

碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——数据可视化和探索

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于机器回归分析的碳排放预测模型——数据可视化和探索 目标是测试所选特征对分析的重要性,检测异常值的存在并准备数据以供进一步分析。 </

Netty实战(十二)

预置的ChannelHandler和编解码器&#xff08;二&#xff09;HTTPS、WebSocket的添加使用和大型数据写入以及几种常见的序列化 一、基于Netty的HTTPS程序1.2 使用HTTPS2.3 WebSocket 二、空闲连接和超时三、 解码基于分隔符的协议和基于长度的协议3.1 基于分割符的协议3.2 基于长…

策 略 模 式「指 鼠 为 鸭」

前言 大家好&#xff0c;我是 god23bin&#xff0c;今天我们来介绍下设计模式中的一个重要的设计模式——策略模式。 当涉及到某个行为或算法有多个变体时&#xff0c;策略模式是一种常见的设计模式。它允许在运行时选择使用不同的策略&#xff0c;而无需修改现有代码。 现在…

OneFormer:规则通用图像分割的一个Transformer

文章目录 OneFormer: One Transformer to Rule Universal Image Segmentation摘要本文方法实验结果 OneFormer: One Transformer to Rule Universal Image Segmentation 摘要 通用图像分割并不是一个新概念。过去统一图像分割的尝试包括场景解析、全景分割&#xff0c;以及最…

【工具】SecureCR-8.5下载、安装激活和使用教程(包含常用设置)

目录 一、安装包下载 二、安装教程 三、激活操作 四、使用教程 五、常用设置 一、安装包下载 SecureCRT8.5安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1yy677I99ln_3evoHc5dMXg 提取码&#xff1a;9tyj 二、安装教程 1. 解压、双击进行安装 2. 安装进…

【LeetCode】136. 只出现一次的数 python

目录 题目描述 第一次刷题 第二次刷题 异或运算的规则 题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;…

[LeetCode周赛复盘] 第 106 场双周赛20230611

[LeetCode周赛复盘] 第 106 场双周赛20230611 一、本周周赛总结6461. 判断一个数是否迷人1. 题目描述2. 思路分析3. 代码实现 6425. 找到最长的半重复子字符串1. 题目描述2. 思路分析3. 代码实现 6426. 移动机器人1. 题目描述2. 思路分析3. 代码实现 6463. 找到矩阵中的好子集…

DHCP是什么?它有什么作用?其工作模式?工作原理?

目录 一、DHCP是什么&#xff1f;二、DHCP的作用&#xff1f;1. 在没有DHCP服务的网络中2. 在有DHCP服务的网络中 三、DHCP的工作模式简介四、DHCP的工作原理五、参考资料 一、DHCP是什么&#xff1f; DHCP是动态主机配置协议&#xff08;Dynamic Host Configuration Protocol…

Vue 封装ajax请求[接口]函数

在Vue项目开发当中&#xff0c;当有了后端提供的数据接口之后呢&#xff0c;就需要来为接口定义接口的请求函数&#xff0c;那么在去定义接口函数之前可以先来封装一个ajax请求函数&#xff1b;可能有的初学者在之前的一些篇目当中看到这个vue发起数据请求的不是使用axios的吗&…

3.MySQL表的增删改查(基础)

文章目录 ☕️1. CRUD☕️&#x1f375;2. 新增&#xff08;Create&#xff09;&#x1f375;&#x1f37c;2.1 单行数据 全列插入&#x1f37c;&#x1f37a;2.2 多行数据 指定列插入&#x1f37a;&#x1f378;2.3关于时间的插入格式(homework数据表)&#xff1a;&#x1f…

串口RS232、RS485最本质区别

由下图可看出不管是RS232还是RS485&#xff0c;其本质都是串口通信&#xff0c;只不过是串口通信电平上的变种而已。所以&#xff0c;我们首先从串口通信讲起。 1、串口通信 任何一种通信都要有物理接口和通信协议。串口通信物理接口如下图&#xff1a; 串口通信协议首先要约…

RBAC权限管理,Shiro实践

概念介绍 RBAC是指基于角色的访问控制&#xff08;Role-Based Access Control&#xff09;&#xff0c;它是一种广泛应用于计算机安全领域的访问控制机制。RBAC通过将用户分配到不同的角色&#xff0c;来控制用户对系统中资源的访问权限。 在RBAC中&#xff0c;每个角色都被…

LVS-DR群集部署

目录 一、LVS-DR数据包流向分析 二、 DR 模式的特点 总结 三、LVS-DR中的ARP问题 1.在局域网中具有相同的IP地址&#xff0c;势必会造成各服务器ARP通信的紊乱 2.路由器根据ARP表项&#xff0c;会将新来的请求报文转发给RealServer&#xff0c;导致Director的VIP失效 3.解…

openGauss5 企业版之yum方式安装

文章目录 1. 支持的架构和操作系统版本2. 使用限制3. 安装方式4. 使用说明 本章节主要介绍在openEuler 22.03 LTS操作系统上&#xff0c;通过yum命令一键安装openGauss数据库。 1. 支持的架构和操作系统版本 x86-64 openEuler 22.03 LTSARM64 openEuler 22.03 LTS 仅在openEu…

【博学谷学习记录】超强总结,用心分享 | 架构师 Maven学习总结

文章目录 Maven基本1.什么是Maven2.为什么用Maven?&#xff08;1&#xff09;jar 包的规模&#xff08;2&#xff09; jar 包的来源&#xff08;3&#xff09;jar 包之间的依赖关系 3.Maven目录结构4.maven仓库配置 Pom层次Pom文件简介Super POM 依赖管理1 依赖传递2 传递性依…

基于51单片机的智能火灾报警系统温度烟雾光

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;火灾报警 获取完整源码源文件电路图仿真文件论文报告等 功能简介 51单片机MQ-2烟雾传感ADC0832模数转换芯片DS18B20温度传感器数码管显示按键模块声光报警模块 具体功能&#xff1a; 1、实时监测及显示温度值和烟雾浓度…