位运算
1、& 与运算
都为1则是1,否则为0
2、| 或运算
有一个1,就为1,否则是0
3、~ 非运算
取相反数
4、^ 异或运算
相同为0,不同为1
注:
1、对两个数进行位运算,需要将两个数转化为二进制:
例如:a = 128的二进制形式为:10000000
b = 129的二进制形式为:10000001
a&b 10000000
a|b 10000001
~a 01111111
a^b 00000001
特别的:android中,我们经常会传入参数比如 left | top确定位置,其原理就是,left top对应的int值进行 或运算,
例如left = 128,top = 129 left | top = 10000001,传入参数,
通过result & left来判断是否选择了left,result & left = 10000000即等于left,说明选择了这个参数。
时间复杂度
http://blog.youkuaiyun.com/firefly_2002/article/details/8008987
确定一个算法的执行次数,所以我们通过执行次数来判断时间复杂度是多少
。
按数量级递增排列,常见的时间复杂度有:
常数阶O(1),对数阶O(
),线性阶O(n),

线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,
k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
例如:
for(i=1; i<=n; ++i)
{
for(j=1; j<=n; ++j)
{
c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次
for(k=1; k<=n; ++k)
c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次
}
}
空间复杂度
O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和
所需要占用的存储空间两个方面衡量。