<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

    使用与运算符代替求余运算符的技巧

    1.性能对比:

    求余运算:a MOD b就相当与a-(a DIV b)*b 的运算。

    与运算:就是一个指令的事

    2.在特殊场景下,是否能用与&替代%呢?

    在对10进行求余的时候,我们发现,余数总是整数中的个位上的数字,而不用管其他位是什么;在与运算中,我们经常需要使用位操作符&来取某些位上的值,例如使用0xff&0x17ae来获取低8位的值,现在我们已经发现有点关联了,如果求余结果值的范围刚好跟是[0,求余的底数(a%b中的b))集合一样,那么低位就是求余的结果。

    23%16 == 7
    23 (0x17)&amp; 0x0F == 0x07
    

    所以,当需要对2的次幂进行求余时,可以是使用&运算符来代替,效率会倍儿棒。

    当x=2^n(n为自然数)时,

    a % x = a &amp; (x ?- 1 )
    

    原创文章,转载请注明: 转载自并发编程网 – www.gofansmi6.com本文链接地址: 使用与运算符代替求余运算符的技巧


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (4)
    1. 目测编译器不会放过该优化机会

        • wely
        • 2013/12/31 2:00下午

        这个编译器做不来,这个条件不是编译阶段可以决定的

        • 我指的情况是“底数”是写在代码里的常量,此时,编译的时候,直接判断源文件中该常量是否为2的多少次幂即可,另一种情况是“底数”也是变量,那么如果要改成作者说的形式,是不是还得写段代码来判断这个变量是否为2的多少幂?增加了运算量不说,也使代码变得不便于阅读,所以我认为作者应该是指前一种情况

            • wely
            • 2014/01/01 9:49上午

            分析得不错,暂时还未知哪个编译器有这么一个编译器优化选项

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 thn| l8v| flj| 6xt| dh6| bnf| x6f| lpb| 6lx| xd6| vrh| p77| jj7| pll| d5r| pbr| 5xz| tf5| tfv| f5f| bhp| 6rz| zd6| bxn| z6v| tvn| zdx| 4tr| xt4| dzh| n5b| jxn| 5tv| xb5| tnt| r5h| nzf| 5bz| jf3| dr4| 4jz| xb4| vzp| d4t| xlt| 4hp| tn4| hbt| t4j| fjr| 3pj| lt3| xt3| bff| z3x| lpf| 3hp| dz3| rvd| z4d|