ソースを参照

Merge pull request #1132 from akiyamaneko/patch-4

NumberUtil 增加新功能 isPowerOfTwo 判断整数是否是2的幂
Golden Looly 5 年 前
コミット
d763282047

+ 11 - 0
hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java

@@ -2156,6 +2156,17 @@ public class NumberUtil {
 	public static BigDecimal pow(BigDecimal number, int n) {
 		return number.pow(n);
 	}
+	
+	
+        /**
+         * 判断一个整数是否是2的幂
+         *
+         * @param n 待验证的整数
+         * @return 如果n是2的幂返回true, 反之返回false
+         */
+        public static boolean isPowerOfTwo(long n) { 
+                return (n > 0) && ((n & (n - 1)) == 0);
+        }
 
 	/**
 	 * 解析转换数字字符串为int型数字,规则如下:

+ 10 - 0
hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java

@@ -254,4 +254,14 @@ public class NumberUtilTest {
 		final BigDecimal mul = NumberUtil.mul(new BigDecimal("10"), null);
 		Assert.assertEquals(BigDecimal.ZERO, mul);
 	}
+	
+	
+	@Test
+	public void isPowerOfTwoTest() {
+		Assert.assertEquals(false, NumberUtil.isPowerOfTwo(-1));
+		Assert.assertEquals(true, NumberUtil.isPowerOfTwo(16));
+		Assert.assertEquals(true, NumberUtil.isPowerOfTwo(65536));
+		Assert.assertEquals(true, NumberUtil.isPowerOfTwo(1));
+		Assert.assertEquals(false, NumberUtil.isPowerOfTwo(17));
+	}
 }