zoukankan      html  css  js  c++  java
  • 位运算---2、3、4的幂

    2的幂——即数字按位展开只有一位为1,所以 num&(num - 1) ==0;

    return (n>0)&&((n&(n-1))==0)

    4的幂——相较于2的幂而言对二进制位要求更高,不仅要求数字按位展开只有一位为1,且1的后面必须有偶数个0,即…00000100,…00010000,…01000000。

    法一:
    (num-1)后必然是三的倍数:

    return  ((num & (num - 1)) == 0) && ((num - 1) % 3 == 0);

    法二,既然已规定32位,那么只有将所有的4的幂的位置上置1——即0x…101010101010101(0x55555555)与num相与为num本身即可;

    return (num >0)&&((num & (num - 1)) == 0) && ((num & 0x55555555) == num);

    法三:由幂的定义出发:利用换低公式 x = log4(num )(以4为底),x为整数即可。

    return (num > 0) && (Math.ceil(Math.log10(num) / Math.log10(4)) - Math.log10(num) / Math.log10(4) == 0);

    3的幂——由幂的定义出发:利用换低公式x = log3(num )(以3为底),x为整数即可;或者Math.pow(log3(num)) == num即可

    return (n > 0) &&(Math.pow(3,Math.round((Math.log(n)/Math.log(3))))==n);

  • 相关阅读:
    java数组
    java 常用类
    java 集合(一)
    mysql相关操作(一)
    记录java BigDecimal
    hxg-yw
    一个困惑我好久的问题
    关于重载和重写的一些小知识
    几个常用的HTTP状态码
    死锁产生的原因和条件简述
  • 原文地址:https://www.cnblogs.com/ckAng/p/12342444.html
Copyright © 2011-2022 走看看