编程技术感想——用取模运算代替判断后得到的高效性

位运算和取模运算的效率 一、测试代码: package BitAndModulus; public class BitAndModulusTest { public static void main(String[] args) { int number=1; for (int i = 0; i <3 ; i++) { System.out... 阅读详情

 

假如, 我们在设计一个循环队列,预先分配一段内存空间使其容量为capacity。当队尾指针(可用一个指示序号的整型变量实现,其永远指向最后一个元素的下一个位置)指向物理空间上的最后一个存储单元时,此时再插入元素,因为队列可能并未真满,可使尾指针返回来指向物理存储空间中的第一个单元。

此时,我们可能需要一个判断:

 

if( ++Q.rear > Q.capacity )
      Q.rear 
= 0;

问题来了!当该队列频繁入队时(甚至我们可以推测出队时也需要同样的判断)或频繁出队时,大规模的判断会让效率很低,怎么办呢?

此时,我们可以用取模运算:

 

Q.rear = ( Q.rear + 1 ) % Q.capacity;

因为取模运算是通过硬件实现的,故效率得到了很可观的提高。

同理,对队列长度的计算也可用

 

Q.length = ( Q.rear - Q.front + Q.capacity ) % Q.capacity;

来代替对头尾指针位置先后的判断。

 

位运算与 和取模运算 &比%具有更高的效率 由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。 https://blog.youkuaiyun.com/weixin_33700350/article/details/85782769?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task... 阅读详情

相关推荐

取模 乘法和除法运算在CPU和GPU上的效率

取模 乘法和除法运算在CPU和GPU上的效率

ytffhew的博客 2273

位运算和取模运算的运算效率对比

前言   总说计算机是擅长于做位运算的,那么到底它有多擅长呢?   通过简单的测试,来探究一样位运算和取模运算的运算效率对比。 一、测试代码: 1 public class BitAndModulus { 2 @Test 3 public void bit() { 4 int number = 10000 * 10;//分别取值1...

weixin_30877181的博客 2496

黑群晖DSM7.0.1物理机安装教程

使用芯片无忧工具,查看U盘的和。使用,格式化U盘。使用镜像写入工具,把引导写入U盘。修改文件,可以使用工具把文件复制到桌面,通过修改好之后,拖进这个界面中。或者在电脑中,查看U盘,打开U盘中的文件直接修改。具体修改内容如下:PID修改为U盘的PIDVID修改为U盘的VID默认只有mac1=a8412083CB52 mac2=0a11323D47F7 ,增加:mac3=a15823C08000 mac4=a23C04158B52 mac5=82a002524158 mac6=38233052415aS

JingLisen的博客 2万+

取模、乘法和除法运算在CPU和GPU上的效率

问题:     将整数n分解为i和j,满足下面关系:n  =  j * idim + i    其中idim为常量。    以下为三种算法实现:    1) i = n % idim,j = (n - i) / idim    2) j = n * ridim,i = n - j * idim,其中ridim = 1.0f / idim,为浮点数。    3) i = n % idim,j = (

Augusdi的专栏 2万+

Robocup3d

一、 比赛介绍 RoboCup 仿真比赛是一个能为多智能体系统和模拟智能进行研究、教育的工具。比赛是在一个标准的计算机环境中进行的,提供了一个完全分布式控制、实时异步多智能体环境。通过这个平台,可以测试各种理论、算法和Agent体系结构。在实时异步、有噪声的对抗环境中,研究多智能体的合作对抗问题。当然,仿真组的比赛使用的机器人并非是真的机器人。一个机器人是一个Agent, 它拥有自己的大脑,

zhanghe2775115的专栏 7264

STM32CUBEIDE调试中HardFault_Handler崩溃的故障分析器实战解析

本文详细解析STM32CUBEIDE调试中HardFault_Handler崩溃问题的实战处理方法。通过内置故障分析器自动诊断硬件异常原因,如内存越界、堆栈溢出等,提供图形化界面简化调试流程,并分享配置步骤、典型案例及高级调试技巧,帮助开发者快速定位和解决嵌入式系统崩溃问题。

night的博客 643

编程语言中运算符的运算效率

运算符运算效率测试

morgerton的博客 1万+

CarPlay wired(USB)连接方案

CarPlay的wired(USB)的连接方案要求车载设备至少要支持USB2.0 Hi-Speed,支持USB Host Mode,该模式要求车载设备能够工作在USB device模式下,因为Apple设备在CarPlay中是作为USB Host的。而通常情况下,车载设备USB是工作在USB Host模式的,而外接的USB设备是工作在USB Device模式的,因而在这种情况下的CarPlay wired(USB)连接方案中就需要进行USB的模式切换。模式切换完成后便是Apple设备(USB HOST)的枚

Ke8323的博客 1万+

位运算与取模运算的效率对比

package com.test; public class Main { public static void main(String[] args) { bit(); modulus(); } public static void bit() { int number = 100 * 1000;// 分别取值10万、100万、1000万、1亿 int a = 1; long start = Sy

m0_45406092的博客 1323

P450酶催化循环的Amber-Gromacs混合模拟实战:从血红素加氧到产物释放

本文详细介绍了针对P450酶完整催化循环的Amber-Gromacs混合模拟实战策略。通过Amber为关键氧合血红素中间体(CPDI)构建精确力场,再利用Gromacs的高效GPU加速进行长时间尺度动力学模拟,完整覆盖从底物结合到产物释放的催化过程,为研究酶催化机制提供了强大的计算工具。

weixin_29201859的博客 315

【局部路径规划模块地图算法】基于势场地图的VFH、VFH+、VFH*算法(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对基于地图的方法–VFH、VFH+、VFH*算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 1686

高效取模运算之按位与(&)运算与扰动函数(HashMap源码简析)

高效取模运算(&)与扰动函数 前一段时间听到有人问HashMap是用链表数组还是用红黑树数组实现的,所以博主今天阅读了一下HashMap的源码。 在阅读HashMap源码时,发现了一个用的很少的表达式,经过网上查阅资料还有一些计算机组成原理的一些相关知识搞懂了这个表达式意义和优点。 接下来我来分享一下我追源代码的过程和对HashMap源码以及这个高效取模运算的理解。 1.测试的准备工作 因...

sww_ang的博客 1896

ATT MTU 交换机制:提升 BLE 数据传输效率的关键

在低功耗蓝牙(BLE)技术的面试中,ATT MTU 交换机制始终是高频考点。无论是芯片厂商的固件开发岗,还是物联网设备的协议栈调试岗,面试官都爱通过这个知识点考察候选人对 BLE 数据传输底层逻辑的理解。本文将系统梳理核心考点,结合历年真题详解应答思路,轻松应对这类问题。​

byte轻骑兵的技术小窝 2411

C++运算符中的取模运算%和位运算&

C++运算符中的取模运算%和位运算& 关于代码优化中的一点小建议: 在对 2n2^n2n 的数取模的情况下,可用位运算符 & 代替 %,对程序效率进行提高。 例如:对 2、4、8 等取模。 %2 == &1 %4 == &3 以此类推。 ...

Fujintian的博客 678

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

weixin_42412049的博客 1015

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java long 取模_位运算和取模运算的运算效率对比

前言总说计算机是擅长于做位运算的,那么到底它有多擅长呢?通过简单的测试,来探究一样位运算和取模运算的运算效率对比。一、测试代码:1 public class bitandmodulus {2 @test3 public void bit() {4 int number = 10000 * 10;//分别取值了10万、100万、1000万、1亿5 in...

weixin_33597080的博客 747

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

除数为2的N次方取模可以用与运算替代,效率更高

取模运算在包括JAVA在内的大多数语言中的效率都十分低下,而当除数为2的N次方时,取模运算将退化为最简单的位运算,其效率明显提升(按照Bruce Eckel给出的数据,大约可以提升5~8倍) 。看看JDK中是如何实现的: Java代码: static int indexFor(int h, int length) {        return h & (length-1);

taoshengyang的专栏 5635

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

为啥要用位运算代替取模呢

  为什么很多开源软件中的源码中,使用位运算代替取模操作,比如: a%b取模的形式都被替换成了a&amp;(b-1) ,前提条件是:b为2的幂(乘方)。   原因: 位运算实现取模只需5个CPU周期,而取模运算符实现至少需要26个CPU周期(注意,是最少!!!)    原文:http://crazyjvm.iteye.com/blog/1725508   言归正传,大家都知道...

玄冬Wong 762

大数取模运算,快速幂取模运算

1.快速幂取模 http://www.cnblogs.com/yinger/archive/2011/06/08/2075043.html 快速幂取模就是在O(logn)内求出a^n mod b的值。算法的原理是ab mod c=(a mod c)(b mod c)mod c  long exp_mod(long a,long n,long b) { long t; if(...

Jeff_的博客 2万+

取模运算的特殊优化

适用场景:对2的幂进行取模。 优化方法:将取模运算转化为位运算,加快执行。 理论基础: 命题:x % 2^N == x & (2^N - 1) 证明: 因为 (2^N-1)的二进制的低N位全是1,其余位全是0, 所以 (x & (2^N-1))是x的二进制的低N位的值, 假设 r = (x & (2^N-1)),则0 <= r < 2^N, 因为 (...

choumin的专栏 2339

关于取模数据序号定位的说明 区码定位是指GBK编码

关于取模数据定位的说明: 以GBK为例 GBK 对 GB2312 进行了扩展。第一字节为 0x81~0xFE,第二字 节分两部分,一是 0x40~0x7E,二是 0x80~0xFE。 即(0x7f-0x40+0xff-0x80)=一个区190个字。 定位方法如下: 第一个字节减去 0x81,则是正确的区位,每个区的大小要根据每个字所占用的字节×190 (0x7f-0x40+0xff-0x80)即可。如果第二个字节小于 0x7f 则减去 0x40, 如果第二个字节大于等于 0x80 则减去 0x41。

chenhao0568的专栏 345

JavaScript 语法:流程控制语句

作者:WangMin 格言:努力做好自己喜欢的每一件事 优快云原创文章 博客地址 ???? WangMin JavaScript流程控制语句的三种基本结构:顺序结构,选择结构,循环结构 顺序结构 从上到下执行的代码就是顺序结构,程序默认就是由上到下顺序执行的,也就是按照代码的先后顺序,依次执行。 条件选择结构控制语句 条件选择控制语句用于基于不同的条件来执行不同的动作,通常在写代码时,对语句中不同条件的值进行判断,进而根据不同的条件执行不同的语句,条件判断语句包括两类: if判断语句; switch多

WangMin@汪末末 510

python学习记录十九-Jupyter如何验证模型的准确性

如何测量模型的准确性? 1.需要将数据集分成两组,一组用于培训train,另一组用于测试testing 比例是7:3 2. 收集测试数据集 3.查看accurary_score可得知每次的数据集结果,可运行多次 test_size=0.2,意思是训练数据是0.8,测试数据是0.2 ...

weixin_39425607的博客 2134
上一篇: C/C++中随机数的生成函数和播种子的函数
下一篇: C++点滴——const/volatile不能用来修饰没有this指针的成员函数
AlwaysSLH
博客等级 码龄20年 63粉丝 17原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值