取模运算符在数组下标的应用

  • 什么是取模运算符%?

定义:

a mod b,设a、b属于正整数且b>0,如果q、r属于正整数满足a=q*b+r,且0≤r<b,则定义:

a mod b = r

注意:取模运算符两侧的除数被除数都是整数,不能是小数。如果你将小数带入运算,编译器可能会出现以下报错,例如 1% 0.5 :

想要很好地利用%,我们就先要了解一下取模运算符的运算性质:

  • 模运算的应用

1. 将下标控制在一定的范围

根据取模运算的运算性质,模运算结果的范围是 0 ~ (除数-1)。反过来就是,如果你想将数据控制在 0 ~ x ,你就可以 %(x+1)。

2. 利用当前下标获取前一个元素

我们想要获取当前下标的前一个时,可能会出现这两种种情况:当前下标是第一个下标时,那么它对应的前一个数据就是下标为末尾的元素;其他情况下,可以直接用当前下标-1来获得前一个元素。例如,当前下标为0时,它对应的前一个元素就是下标为7的元素;当前下标为2时,它对应的前一个元素就是下标为2-1=1的元素

那么我们如何利用%来实现这一个过程呢? 

这里我先给出答案在做出解释:

i = (x+size)%(size+1),这里 i 代表最终下标,x代表当前下标,size代表数组的最后一个下标(注意不是数组长度)

  • 分析:

根据我们的需求,我们想要x经过%运算后能够变为x-1,并且在特殊情况下,x=0可以变成x等于最后一个下标,再根据取模运算的性质,(x+size)%(size+1)可以写成((x-1)+size+1)%(size+1)-->  (x-1)%(size+1)+(size+1)%(size+1),因为 (x-1)一定小于(size+1),所以前半部分的运算结果就是(x-1),后半部分运算结果为0,最终结果就是(x-1)。

其实,主要思想就是将 x 配凑成 x-1,那么可能会有疑惑:为什么不把x直接减一进行运算呢?

事实上,这里有一点需要注意:取模运算 mod 是可以满足的,我们使用%运算主要想应对的就是下标为零的情况,当下标为零时,直接减一,会变成 -1 mod(size+1),这里就涉及负数作为被除数的运算:

在数学中,余数通常定义为非负整数,所以最终答案是1(运算-13 = (-2)*7 + 1),我们会发现这样不就满足我们的需求了吗,例如:(0-1)%(4+1)= 4 ( -1 = (-1)*(4+1) + 4)。

但是,在编程中,通常取模运算(%)的结果会保持符号与被除数一致。这是因为在计算机中,% 运算符会根据被除数的符号来确定余数的符号。所以如果你在编译器上运算这个式子,答案会是-6,因为编译器在运算时会先将负号去掉进行计算:13%7=6,最终的结果会根据被除数的符号确定,因为被除数(-13)是负数,所以最终的答案是-6.

所以,我们不能通过直接减一达到我们想要的效果,而是通过加上一个size来配凑。

 3. 利用当前下标获取下一个元素

我们想要获取当前下标的下一个时,可能会出现这两种种情况:当前下标是最后一个下标时,那么它对应的下一个数据就是下标为0的元素;其他情况下,可以直接用当前下标+1来获得下一个元素。例如,当前下标为7时,它对应的下一个元素就是下标为0的元素;当前下标为2时,它对应的下一个元素就是下标为2+1=3的元素

这里我先给出答案在做出解释:

i = (x+1)%(size+1),这里 i 代表最终下标,x代表当前下标,size代表数组的最后一个下标;

如果你看懂了,上面我第一个的分析,那么你也能够理解这个式子是怎么来的。


本次内容到此结束了!如果你觉得这篇博客对你有帮助的话 ,希望你能够给我点个赞,鼓励一下我。感谢感谢……

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Debootstrap 教程

文章目录 Debootstrap 教程安装 debootstrap使用 debootstrap运行 debootstrap进入新的系统结束语 Debootstrap 教程 debootstrap 是一个用于在 Debian-based 系统上创建一个基本的 Debian 系统的工具。它可以用于创建 chroot 环境、容器或者为新的系统安装做准备。 安装 deb…

分布式数据库架构:高可用、高性能的数据存储

在现代信息时代&#xff0c;数据是企业发展的核心。为了支持海量数据的存储、高并发访问以及保证数据的可靠性&#xff0c;分布式数据库架构应运而生。分布式数据库架构是一种将数据存储在多个物理节点上&#xff0c;并通过一系列复杂的协调和管理机制来提供高可用性和高性能的…

Qt下拉菜单

1&#xff0c;QComboBox 2&#xff0c;setMenu()---设置下拉菜单 AI对话未来丨智能写作对话: setMenu()是QWidget类的一个成员函数&#xff0c;在Qt中用于将一个菜单作为一个控件的下拉菜单设置。具体来说&#xff0c;它会把相应的菜单对象与该控件关联&#xff0c;并在控件上…

Element通过v-for循环渲染的form表单校验

需求&#xff1a;有个表单信息是v-for渲染的&#xff0c;例如下图&#xff0c;通过循环遍历实现新增和删除模块&#xff0c;按照平时的写法实现校验&#xff0c;是不能实现我们想要的效果&#xff0c;根据这个需求&#xff0c;我找到了一个解决方法 1.HTML <el-form ref&qu…

ESD门禁管理系统的主要功能和优势

ESD门禁管理系统是一种用于控制和管理人员进出特定区域的系统。它通常由门禁控制器、门禁读卡器、门禁管理软件等组成。 ESD门禁管理系统的主要功能包括&#xff1a; 1. 门禁控制&#xff1a;通过门禁控制器实现对门禁设备的控制&#xff0c;如开关门、锁定门等。 2. 门禁验…

Go与Rust的对比与分析

Rust 和 Go 是两种现代语言&#xff0c;近年来获得了巨大的关注&#xff0c;每种语言都有自己独特的优势和权衡。在这篇文章中&#xff0c;我们将深入探讨 Rust 和 Go 之间的差异&#xff0c;重点关注性能、语言功能和其他关键因素&#xff0c;以帮助您针对您的开发需求做出明智…

【面试】项目经理面试题

文章目录 一、项目管理面试中通常会问到的问题1.项目管理软件工具知识2.做项目计划的技能3.人员管理技能4.沟通技巧5.方法论知识 二、问面试官的问题三. 面试系列推荐 一、项目管理面试中通常会问到的问题 1.项目管理软件工具知识 问题 1: 工期和工作量之间的差异是什么? 答案…

视频汇聚平台EasyCVR安防视频监控在地下停车场中的具体应用方案

一、背景 随着我国城市化进程的加快&#xff0c;汽车已成为人们生活中不可缺少的交通工具&#xff0c;但在许多城市中&#xff0c;买车容易&#xff0c;停车难的问题愈发突出。特别是在人群密集的商场、写字楼和地下停车场&#xff0c;车流量大、车况复杂。传统的人工判断方式耗…

5、Spring_DI注解开发

DI 注解开发 1.目前面临问题 建立 mapper public interface EmployeeMapper {void save(); }建立 mapper 实现类 Repository public class EmployeeMapperImpl implements EmployeeMapper {public void save(){System.out.println("保存员工信息");} }建立 service …

【Unity】如何制作小地图

我们为什么要制作小地图呢&#xff1f; 原因很简单&#xff1a; 导航和定位&#xff1a;小地图可以显示玩家当前位置以及周围环境的概览。这使得玩家能够更好地导航和定位自己在游戏中的位置&#xff0c;找到目标或避开障碍物。场景了解&#xff1a;通过小地图&#xff0c;玩…

芯片验证板卡设计原理图:446-基于VU440T的多核处理器多输入芯片验证板卡

基于VU440T的多核处理器多输入芯片验证板卡 一、板卡概述 基于XCVU440-FLGA2892的多核处理器多输入芯片验证板卡为实现网络交换芯片的验证&#xff0c;包括四个FMC接口、DDR、GPIO等&#xff0c;北京太速科技芯片验证板卡用于完成甲方的芯片验证任务&#xff0c;多任务…

大数据 算法

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。这些数据集合通常包括结构化数据&#xff08;如数据库中的表格数据&#xff09;、半结构化数据&#xff08;如XML文件&#xff09;和非结构化数据&#xff08;如文本、音频和视频文件&#xff09;。大数据…

Blazor Session设置

文章目录 前言SessionProtectedSessionStorage 类信息加密使用场景 代码部分Nuget扩展安装源码使用&#xff0c; 相关资料 前言 微软官方封装了一些浏览器的操作&#xff0c;其中就有Session的操作的封装 ProtectedSessionStorage 微软文档 因为我们知道&#xff0c;依赖注入…

【Redis】Redis哨兵模式

【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;需要人工干预费事费力&#xff0c;为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具&#xff0c;它可以实现对 Redis 的监控…

PHP自己的框架session()使用(完善篇六)

1、PHP自己的框架session() 2、session类&#xff08;SessionBase.php&#xff09; <?php class SessionBase {/*** 设置session*/public static function set($name, $data, $expire600){$session_data array();$session_data[data] $data;$session_data[expire] time…

零阶矩、一阶矩、二阶矩、…

数学中矩的概念来自物理学。在物理学中&#xff0c;矩是表示距离和物理量乘积的物理量&#xff0c;表征物体的空间分布。矩在统计学和图像中都有很重要作用&#xff0c;我们常用的Adam优化器其全称为自适应矩估计优化器。本文将介绍各阶矩的理解和不同场景的应用。 Key Words&a…

wazuh初探系列一 : wazuh环境配置

目录 方法一&#xff1a;一体化部署 安装先决条件 第一步、安装所有必需的软件包 第二步、安装Elasticsearch 1、添加 Elastic Stack 存储库 安装 GPG 密钥&#xff1a; 添加存储库&#xff1a; 更新源&#xff1a; 2、Elasticsearch安装和配置 安装 Elasticsearch 包…

2023年8月第3周大模型荟萃

2023年8月第3周大模型荟萃 2023.8.22版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、LLM-Adapters&#xff1a;可将多种适配器集成到大语言模型 来自新加坡科技设计大学和新加坡管理大学的研究人员发布了一篇题为《LLM-Adapters: An …

引领娱乐潮流:邀请明星办个人演唱会的五大关键步骤

随着娱乐产业的不断壮大和观众对明星的热情高涨&#xff0c;举办个人演唱会已经成为了一种广受欢迎的文化现象。这种活动不仅让粉丝们有机会亲身近距离感受偶像的音乐魅力&#xff0c;同时也为明星和品牌提供了一个宝贵的互动平台。然而&#xff0c;要成功地邀请明星办个人演唱…

【JAVA基础】 IO详解

【JAVA基础】 IO详解 文章目录 【JAVA基础】 IO详解一、概述二、IO流的作用三、IO流的使用场景四、IO流的分类4.1 传输数据的单位分&#xff1a;4.2 数据传输的方向分&#xff1a;4.3 流的角色的不同分&#xff1a; 五、IO流体系六、字节输入流InputStream七、字节输出流 Outpu…