`
qindongliang1922
  • 浏览: 2145594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116271
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124527
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58387
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70318
社区版块
存档分类
最新评论

使用位运算替代模运算

    博客分类:
  • JAVA
阅读更多


昨天的分析HashMap原理的文章里面提到,使用位运算替代取模运算效率高,但位运算只能在特定场景下才能替代%运算。


正常情况下:
````
a % b = a - (a / b)*b 

````


但如果b的值为2的n次方的时候(n为自然数),这时候就可以用位运算来替代模运算,
转化如下:

````
a % b = a & (b-1)
````


2的n次方的二进制如下:

````
`
 0001 2^0  1  
 0010 2^1  2
 0100 2^2  4
 1000 2^3  8

````


从上面能看到左移一位是放大2倍,右移一位是缩小2倍


分别减一后的二进制

````

0000 2^0-1 0
0001 2^1-1 1
0011 2^2-1 3
0111 2^3-1 7

````


举例

我们算下11%8的模,

11的二进制是:1011

代入上面的公式:
````
11 % 8 = 11 & (8-1) 
````


7的二进制:   0111


二者做&(与)运算  ,回忆下运算规则:
````
& 与。 全1为1, 有0为0。  任何数与0与都等于0。  
| 或。 有1为1, 全0为0。  任何数与0或都等于原值。
~ 非。 逐位取反
^ 异或。 相同为0,相异为1。 任何数与0异或都等于原值。
````


结果:

1011 & 0111 = 0011

转化成10进制后=3

所以11%8=3



这种方法只是适合于求一个数除以二的N次冥才正确,求模的过程,就是2^n-1的中1的个数就是n的值,再与a做&运算,得出来的低位就是我们期望的余数。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。

0
1
分享到:
评论

相关推荐

    运算放大器可以替代比较器吗

    许多运算放大器都在输入端之间有电压钳位,其大多数一般都使用背靠背二极管(有时使用两个或者更多的串联二极管)来实施。这些二极管保护输入晶体管免受其基极结点反向击穿的损害。差动输入为约 6V 时便会出现许多 IC ...

    运算放大器可以替代比较器吗?

    本文为大家解决运算放大器是否可以替代比较器的问题,感兴趣的朋友可以看看。

    运算放大器可以替代比较器吗?

    许多运算放大器都在输入端之间有电压钳位,其大多数一般都使用背靠背二极管(有时使用两个或者更多的串联二极管)来实施。这些二极管保护输入晶体管免受其基极结点反向击穿的损害。差动输入为约 6V 时便会出现许多 IC ...

    三目运算与if-else的区别

    JS中三目运算符和if else的区别分析与示例

    C++ 大整数类 高精度运算库

    适合做为临时或快速替代方案使用。 本运算库采用模拟竖式算法,加法和减法的时间复杂度为O(N),乘法和除法的时间复杂度为O(N^2)。 本运算库最佳运行系统为32位。64位系统未能充分发挥硬件的性能,16位系统会有溢出...

    关于几种图像点运算方法的探讨

    图像点运算方法最终的成果形式是一个处于操作系统中间层的库,部分替代系统原本的OSD库,这个图像点运算方法里包含了最基础的简单图形算法和需要用到的数学函数,以及打包出来的用以实现绘制效果的图形效果函数库。...

    C语言浮点数运算

    float浮点数要比同为4字节的int定点数表示的范围大的多,那么是否可以使用浮点数替代定点数? 为什么float型浮点数9.87654321 > 9.87654322不成立?为何10.2 - 9的结果不是1.2,而是1.1999998?为何987654321 + ...

    定点数转浮点运算

    本软件实现定点数转化为浮点数的运算。

    利用布尔运算的定制化下颌骨替代物设计方法 (2009年)

    为了使下颌骨替代物体具有特定的形状,并与相邻骨骼具有正确的相对位置和精确的连接方式,提出了利用布尔运算的定制化下颌骨重建方法.采用医用CT扫描的方法获得原始骨骼数据,从而保证了骨替代物的数据原始性以及与...

    基础电子中的运算放大器可以替代比较器吗?

     许多运算放大器都在输入端之间有电压钳位,其大多数一般都使用背靠背二极管(有时使用两个或者更多的串联二极管)来实施。这些二极管保护输入晶体管免受其基极结点反向击穿的损害。差动输入为约 6V 时便会出现

    vhdl 除法器

    任意正整数的快速除法器属于电子器件技术领域。主要解决现有除法器运算速度慢、元器件多的问题。技术要点是通过两位二进制数加两位二进制数的加法器和两位二进制数加一位二进制...在使用特殊除法的场合有不可替代的作用

    运算放大器:驱动PIN二极管替代方案

    运算放大器可以创造性地用作传统放大器的替代方案,其性能与PIN二极管专用驱动IC相当。此外,运算放大器可以提供增益调整和输入控制功能,而且当使用内置电荷泵的运算放大器时,无须负电源,这就提高了PIN二极管的...

    模拟技术中的圣邦推出的通用运算放大器SGM358可替代LMV358

    圣邦微电子(SGMC)推出1MHz通用运算放大器SGM358,该产品具有双通道、轨到轨输入/输出、低成本的特点,并采用CMOS工艺,具有很宽的共模输入电压范围和输出电压范围,可完全替代LMV358。  据介绍,SGM358的典型输入...

    freemarker语法知识

    FreeMarker的模板文件并...1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出

    论文研究-一种无线切换认证协议的性能改进.pdf

    该协议不使用对运算,仅使用加法群的点乘运算替代,提高了协议的效率,并且具有用户匿名性、不可追踪性和有条件的隐私保护性。用户与认证服务器满足互认证性,能够安全地协商会话密钥并且周期性地更新。该协议能有效...

    一种低复杂度的Householder多级最小模级联相消器

    该方法用通道间具有最小模的样本商作为复权,替代Householder多级维纳滤波器的权值计算,具有收敛速度快、运算量小等特点,且对受相关干扰影响的非平稳数据工作性能良好。仿真结果表明,此算法用较少样本就可取得采样...

    基于MFC CString的计算器类

    3.类似的可以自行编写双目运算替代宏。 4.可以计算阶乘!,次方^。 5.可以计算无限括号套括号的情况。 6.每次计算,自动保存计算结果到类中的vector中。 7.可以对计算结果随机访问和删除。 8.写了很多接口函数,重载...

    C# 字符串公式计算

    用最笨的方法做的,对于一次性的计算效率不高.对于大数据量的计算,效率比较高.对于未知量可以用指定字符串替代 可以增加函数,

    ASP.NET的网页代码模型及生命周期

    q 视图状态的值经过哈希运算和压缩保护,安全性更高。 视图状态同样有一些缺点,缺点如下所示。 q 视图状态会影响性能,如果页面存储较大较多的值,则性能会有较大的影响。 q 在手机,移动终端上,可能无法保存视图...

Global site tag (gtag.js) - Google Analytics