You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.0 KiB
55 lines
1.0 KiB
package class018;
|
|
|
|
public class Code02_PowXN {
|
|
|
|
public static void main(String[] args) {
|
|
long a = 2;
|
|
long n = 13; // 1101
|
|
long t = a;
|
|
long res = 1;
|
|
while (n != 0) {
|
|
// n = 110111011111
|
|
// & 1 = 000000000001
|
|
// 000000000000
|
|
// n & (n-1)
|
|
// 把n抹掉最右侧的1
|
|
// n = 10010101100010000
|
|
// n-1 = 10010101100001111
|
|
// & = 10010101100000000
|
|
if ((n & 1) == 1) {
|
|
res *= t;
|
|
}
|
|
t = t * t;
|
|
n = n >> 1;
|
|
}
|
|
System.out.println(res);
|
|
System.out.println(Math.pow(2.0, 13));
|
|
System.out.println(-Integer.MIN_VALUE);
|
|
System.out.println(Math.abs(Integer.MIN_VALUE));
|
|
|
|
}
|
|
|
|
// 求x的n次方
|
|
public static double myPow(double x, int n) {
|
|
if (n == 0) {
|
|
return 1D;
|
|
}
|
|
if (n == Integer.MIN_VALUE) {
|
|
return (x == 1D || x == -1D) ? 1D : 0;
|
|
}
|
|
// 4.5 -3
|
|
int pow = Math.abs(n);
|
|
double t = x;
|
|
double ans = 1D;
|
|
while (pow != 0) {
|
|
if ((pow & 1) != 0) {
|
|
ans *= t;
|
|
}
|
|
pow >>= 1;
|
|
t = t * t;
|
|
}
|
|
return n < 0 ? (1D / ans) : ans;
|
|
}
|
|
|
|
}
|