zoukankan      html  css  js  c++  java
  • 巧妙的位运算及模运算

    输入2的n次方:
    如果突然要你输入2的19次方,你是不是还要想一下呢?敲个524288多累啊。用位运算:1 < < 19又快又准。

    乘除2的倍数:
    千万不要用乘除法,非常拖效率。只要知道左移1位就是乘以2,右移1位就是除以2就行了。
    比如要算25 * 4,用25 << 2就好啦。

    判断偶数:
    a % 2取模是最常用的判断方法之一。这样要用到除法运算,不好。实际上,还是用位运算解决:a & 1。效果和a % 2是一样的,但是要快得多。

    对2的倍数取模:
    类似上面的方法。对2的倍数取模,只要将数与2的倍数-1做与运算就可以了。如:
    a % 8 = a & (8-1)
    节省乘除法可以提高效率。

    判断一个整数是否是处于 0-65535 之间(常用的越界判断):
    用一般的 (a >= 0) && (a <= 65535) 可能要两次判断。
    改用位运算只要一次:
    a & ~((1 << 16)-1)
    后面的常数是编译时就算好了的。其实只要算一次逻辑与就行了。

    算掩码:
    比如一个截取低6位的掩码:0×3F
    用位运算这么表示:(1 << 6) - 1
    这样也非常好读取掩码,因为掩码的位数直接体现在表达式里。

    还有,做一个循环限定的时候可以用模. 比如只需要0-2的不停循环 for( int i=0 ; i<3; i=(++i)%3 )

  • 相关阅读:
    129. Sum Root to Leaf Numbers
    113. Path Sum II
    114. Flatten Binary Tree to Linked List
    112. Path Sum
    100. Same Tree
    300. Longest Increasing Subsequence
    72. Edit Distance
    自定义js标签库
    JS 实现Table相同行的单元格自动合并示例代码
    mysql 高版本only_full_group_by 错误
  • 原文地址:https://www.cnblogs.com/kevin1988/p/3630425.html
Copyright © 2011-2022 走看看