位运算-判断数是否是2的幂、4的幂

2022-6-3 diaba 笔试题

package com.jiucaiyuan.net.question;

/**
 * <pre>
 * 判断一个32位正数,是不是2的幂、4的幂
 *   2的幂,一个数的二进制只有一个1,一定是2的幂
 *     方法1:依靠拿到这个数最右侧的1的方法,然后再和原 数进行比较,如果相等,是,否则不是
 *     方法2:如果一个数x只有一个1,那么x-1,原来1变为0,后面所有0都变为1,那么 `x & (x-1) == 0`
 *   4的幂,一个数的二进制只有一个1,并且 `x & 0101010101 != 0`
 *  </pre>
 * @Author jiucaiyuan  2022/6/3 23:53
 * @mail services@jiucaiyuan.net
 */

public class Power {

    /**
     * 判断n是否为2的幂
     * @param n
     * @return
     */
    public static boolean is2Power(int n){
        return (n & (n-1)) == 0;
    }

    /**
     * 判断n是否为4的幂
     * @param n
     * @return
     */
    public static boolean is4Power(int n){
        //                         ...1010101
        return is2Power(n) && ((n & 0x55555555) != 0);
    }

}

发表评论:

Powered by emlog 京ICP备15045175号-1 Copyright © 2022