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

c程序杂谈系列(加减乘除模篇)

为了提高c语言的运行效率,我们需要采用更高效的运算,那么切入点就是随处可见的基本运算符合,从底层架构考虑,加减乘除的效率比位运算低很多,为了能够更好迎合CPU的二进制,有必要取代基本的加减乘除以及求余符号了。

求余符合是非常耗费时间的,但是我们的CPU采用的是二进制,有没有利用二进制的性质来提高效率的呢?

当然有,笔者先给出结论:对于正整数X,Y = 2^n,X%Y 可以被X&(Y-1)代替

证明过程如下:

另一种证明:

如果只是摆出结论,可能会让很多人感到无所适从,让我们看看有哪些有名的框架源码用到了这一结论吧。

freeRTOS是一款著名的RTOS,被许多mcu产品采用,下图是内存管理文件heap1.c中的代码:

在hashcode(jdk7)中,也有如下源码:

static int indexFor(int h, int length) {return h & (length-1);}

综上,笔者给出了模运算的代替形式,并证明了等式。后面的加减乘除这些运算,笔者会陆续更新,如果忘了当我没说。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【前端element-ui】对于封装el-select和checkbox-group的多选控件导致数据双向绑定失败问题的处理
  • Python基础知识笔记——常用函数
  • 机械拆装-基于Unity-本地数据持久化
  • Python面试整理-数据处理和分析
  • 丹摩智算:如何在云端开发一个AI应用——基于UNet的眼底血管分割案例
  • 从零开始学习黑客技术,看这一篇就够了
  • vue-i18n使用方法
  • RHCE之seLinux和防火墙
  • C#知识|文件与目录操作:目录的操作
  • 空指针和野指针的区别
  • Arduino Mega 2560开发板的引脚分配图及说明,以及链接can的方法
  • vite tsx项目的element plus集成 - 按需引入踩坑
  • 虚拟机配置RabbitMQ集群教程
  • 长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现
  • 【WiFi】一文了解WiFi中的 SISO/SIMO/MISO/MIMO/SU-MIMO/MU-MIMO/Beamforming
  • 【译】JS基础算法脚本:字符串结尾
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • create-react-app项目添加less配置
  • Docker: 容器互访的三种方式
  • JAVA多线程机制解析-volatilesynchronized
  • nginx 负载服务器优化
  • python3 使用 asyncio 代替线程
  • React-flux杂记
  • spring boot 整合mybatis 无法输出sql的问题
  • 官方解决所有 npm 全局安装权限问题
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 爬虫模拟登陆 SegmentFault
  • 驱动程序原理
  • 入手阿里云新服务器的部署NODE
  • 实现菜单下拉伸展折叠效果demo
  • 提醒我喝水chrome插件开发指南
  • 一道闭包题引发的思考
  • 以太坊客户端Geth命令参数详解
  • ionic异常记录
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ###C语言程序设计-----C语言学习(3)#
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (31)对象的克隆
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (ZT)一个美国文科博士的YardLife
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)Neo4j下载安装以及初次使用
  • (一)SvelteKit教程:hello world
  • (一)VirtualBox安装增强功能
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)深入super,看Python如何解决钻石继承难题
  • ../depcomp: line 571: exec: g++: not found
  • .Family_物联网
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题