当前位置: 首页 > news >正文

取模和与运算的优化

1//来自coolshell的一个代码。
1 <span style="color: #000000;">int steps = 64 * 1024 * 1024;
2// Arbitrary number of steps
3 int lengthMod = arr.Length - 1;
4 for (int i = 0; i < steps; i++)
5{
6     arr[(i * 16) & lengthMod]++;   // (x & lengthMod) is equal to (x % arr.Length)
7}
8</span>

 

注释中提到(x & lengthMod) is equal to (x % arr.Length)。
表示从没见到过这种优化啊,各种查资料才发现,其实这个有一个条件,即通常只有模去 2^n 才好直接用位运算做, x mod 2^n = x & (2^n-1)

至于原理,换算成二进制一切都清楚了。

取模和与运算

 

我们可以发现,因为除数是2^n,那么它二进制是一个1000..0(n个0)的形式。x在从n位(从右往左数)开始必然是2^n的倍数。取模的话,就是从右往左数n-1位的值。所以,让x^n-1使得那块全变为1,然后进行与运算,就得到模值了。

相对于通常的取模,位运算会更快。这是个不错的优化。

转载请注明:旅途@KryptosX » 取模和与运算的优化

相关文章:

  • STORM_0007_Multi-Lang protocol of Storm/多语言协议的翻译
  • Jquery 中map()函数的用法
  • 大公司都有哪些开源项目~~~简化版
  • Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
  • Arm开发板+Qt学习之路-multiple definition of
  • 清除windows系统垃圾文件简易脚本(bat)
  • 1225 八数码难题
  • ES6初探,什么是ES6
  • who命令
  • Android 采用Layout Inflater创建一个View对象
  • VS 类快捷键
  • /etc/motd and /etc/issue
  • java中的异常处理机制_函数覆盖时的异常特点
  • 关于狄克斯特拉算法(dijkstra)总结
  • CSS3实现两行或三行文字,然后多出的部分省略号代替
  • 【个人向】《HTTP图解》阅后小结
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript实现分页效果
  • js ES6 求数组的交集,并集,还有差集
  • Laravel5.4 Queues队列学习
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • 成为一名优秀的Developer的书单
  • 从零开始在ubuntu上搭建node开发环境
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 七牛云假注销小指南
  • 实现菜单下拉伸展折叠效果demo
  • 学习笔记:对象,原型和继承(1)
  • 用简单代码看卷积组块发展
  • ​2020 年大前端技术趋势解读
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #mysql 8.0 踩坑日记
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (ros//EnvironmentVariables)ros环境变量
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (第61天)多租户架构(CDB/PDB)
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)windows配置JDK环境
  • (二十四)Flask之flask-session组件
  • (分布式缓存)Redis分片集群
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (六)vue-router+UI组件库
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)基于IDEA的JAVA基础10
  • (转)IOS中获取各种文件的目录路径的方法
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .gitignore
  • .NET gRPC 和RESTful简单对比
  • .Net 应用中使用dot trace进行性能诊断
  • .net实现客户区延伸至至非客户区
  • .py文件应该怎样打开?
  • [ 转载 ] SharePoint 资料
  • [20150629]简单的加密连接.txt
  • [20150707]外部表与rowid.txt
  • [2018-01-08] Python强化周的第一天