看看下面的代码来找到X ^ y.
/* Find exponent in logarithmic complexity */
int findPower(int base, exponent){
if( 1 == exponent ) return base;
return (findPower(base, exponent/2)*findPower(base, exponent-exponent/2));
}
int main(int argc, char *argv[]){
if(argc < 3) {
printf("Usage :: logpow baseNumber power\n");
return -1;
}
printf("%s ^ %s = %d\n", argv[1], argv[2], findPow( atoi(argv[1]),
atoi(argv[2])) );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
分析表明,这具有theta(log(n))的复杂性.但是我用它来测量时间,这是结果
Run 1: (calculating 1^500_million)
user-lm Programming # time ./a.out 1 500000000
1 ^ 500000000 = 1
real 0m5.009s
user 0m5.000s
sys 0m0.000s …Run Code Online (Sandbox Code Playgroud) 我们知道int值的最大值为2 ^ 31 - 1,最小值为-2 ^ 31.如果我们将int设置为最大值:
int x = int.MaxValue;
Run Code Online (Sandbox Code Playgroud)
我们将x取出并在未选中的字段中添加一个
unchecked
{
x++;
}
Run Code Online (Sandbox Code Playgroud)
然后我们得到x = int的最小值.我的问题是为什么会发生这种情况以及它如何在二进制方面发生.
我在下面的问题是理论上的,然后是实用 从许多在线可用的Java资源中我发现default constructor一个类的规格低于规范:
throws条款Java语言规范没有提供定义default constructor,它只说明了这一点
如果类(定义)不包含构造函数声明,则默认构造函数(由编译器)隐式声明.
请注意,措辞implicitly declared暗示明确定义的默认构造函数是可能的.让我们考虑下面的课程:
public class Point {
private int x;
private int y;
public int getX() { return x; }
public int getY() { return y; }
}
Run Code Online (Sandbox Code Playgroud)
对于这个类,编译器将生成以下默认构造函数:
public Point() {
super();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我作为一个程序员实现一个构造函数,public Point() { }它可以被称为default constructor上面的类Point吗?如果没有,那么任何明确定义的构造函数都可以被认为是default constructor?我很欣赏某位专家或者对这个主题绝对肯定的答案.
theory ×4
algorithm ×1
big-o ×1
binary ×1
c# ×1
constructor ×1
java ×1
math ×1
numbers ×1
performance ×1