网站为什么被百度k了,石家庄发布最新公告,惠东县住房和城乡规划建设局网站,标志设计公司有哪些1.number%20 取余#xff08;取模#xff09;只能判断number是不是2的倍数但不一定是2的N次方#xff0c;如#xff1a;6%20但是他并不是2的N次方 2.(number(number-1))0 原理#xff1a;如果number是2的N次方则表示2进制位只有一位是1。如#xff1a;2 #xff08… 1.number%20 取余取模只能判断number是不是2的倍数但不一定是2的N次方如6%20但是他并不是2的N次方 2.(number(number-1))0 原理如果number是2的N次方则表示2进制位只有一位是1。如2 10 4100 8(1000) 16(10000) 那么number-1就会得到一个低位全部是1的2进制数 101 3011 拿8做例子 8 1000 7 0111 0000 结果就是0 当一个整数是2的N次方时它的二进制表示只有一位是1其余位都是0。例如2的3次方是8其二进制表示为000010002的4次方是16其二进制表示为00010000。 如果我们将一个2的N次方的整数减去1会得到一个所有低位都是1的数。例如对于2的3次方的整数8减去1得到7其二进制表示为00000111对于2的4次方的整数16减去1得到15其二进制表示为00001111。 当我们对这两个数进行按位与操作 (number (number - 1))如果结果等于0则表示只有一位是1也就是指定的整数是2的N次方。 举个例子假设我们要判断整数12是否是2的N次方。其二进制表示为00001100。我们可以进行计算 12 : 00001100
12 - 1 : 00001011
AND 操作 : 00001000 结果是00001000不等于0说明12不是2的N次方。 public static bool IsPowerOfTwo(int number)
{// 判断是否为负数或零if (number 0)return false;// 使用位运算判断是否只有一位是1return (number (number - 1)) 0;
}private static boolean isPowerOfTwo(int n) {return (n 0) ((n (n - 1)) 0);
}
如果计算这个数是2的N次方得出返回N这个值 public static int getExpontOfTwo(int number){if(number 0 || (number (number -1)) ! 0){return -1;}int expont 0;while(number ! 1){number 1;expont;}return expont;}}