首页 > 其他 > 详细

位运算---2、3、4的幂

时间:2020-02-21 18:56:41      阅读:60      评论:0      收藏:0      [点我收藏+]

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);

 

位运算---2、3、4的幂

原文:https://www.cnblogs.com/ckAng/p/12342444.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!