判断一个数是否为4的幂

分析:

    首先想到的肯定是for循环写出来,但是for循环写出来的肯定有大量的资源消耗,所以优化的话就是运用位运算来解决。

    要想判断一个数是否为4的幂,先判断一个数是否为2的幂。

先看一下1到8 对应的二进制的数,能不能找到规律

    

    把2的幂单独摘出来,2的幂就是在上一个数的基础上乘2,而乘2在二进制中就是在后面补零。


每个2的幂的数都是:首位为1后面都是0

    那么怎么不用for循环判断呢?下面就是一个技巧:

    

    2和1的二进制,进行&操作    ——>                  (10&1)==0

  4和3的二进制,进行&操作    ——>                  (100&11)==0

  8和7的二进制,进行&操作    ——>                  (1000&111)==0

这就是一个恒定的规律:如果(n&n-1)==0那么这个数一定是二的幂(限定:n-1>=0)。

接着那么怎么判断一个数是不是4的幂 ——>   找规律

   把4的幂单独摘出来,4的幂就是在上一个数的基础上乘4,而乘4在二进制中就是在后面补两个零。


所以四进制的1一直都在奇数位上,那么找一个数进行&操作后,能判断出来1在奇数位还是在偶数位,那问题不就解决了。恰好,真有几个特殊的数


(n&0xaaaaaaaa)==0,那这个数不就是4的幂了,

(n&0x55555555)!=0,那这个数不就是4的幂了,

所以:

import java.util.Scanner;

public class exercise1 {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        long n = scan.nextLong();

        if((n&(n-1))==0&&n-1>=0&&(n&0x55555555)!=0) {

            System.out.println("true");

        }else {

            System.out.println("false");

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 8,415评论 1 9
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,196评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 8,587评论 0 9
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,091评论 6 13
  • DAY 01 JAVA简述 Java是由SUN公司在1995年推出的一门高级编程语言,是现今服务器端的首选编程语言...
    周书达阅读 4,649评论 0 0

友情链接更多精彩内容