java面试准备-day03

来源:互联网 发布:淘宝袜子好评语100字 编辑:程序博客网 时间:2024/04/27 03:20

二十一、 (x&y) + ( (x^y)>>1 )=(x+y)/2证明

  1. 关于二进制的所有证明,今天得到了很好的理解。对于任何一个数,首先,我们要把所有的数想成1和0之间的运算,而不是11110000和10100101之间的运算,这样才能找到规律(可能不适用于其他的运算,暂时未发现)。
  2. java中的二进制运算包括与&、或|、非~、异或^四种,以及几种位移运算;这里我们把所有的整数数都拆开来看:m=a0+a1*10+a2*10^2+a3*10^3+a4*10^4+。。。。这样就是所有的对二进制进行运算,再次,我们考虑一种情况,即这种运算之中不夹杂加减乘除,或者说是加减乘除不影响位运算结果的情况,这样,我们就可以,把所有的位运算看做成1和0之间的运算,具体的例子如下:
  3. 对于这个证明:
    由于1&1=1,0&0=0,1&0=0;——100
    再者1^1=0,0^0=0,1^0=1; ——001
    这里面注意到&运算相当于对数字相同的进行了减半:即/2(本身两个数就是一样的);
    ^运算相当于对数字不同的进行了相加;
    所以左边的
    =(x中和y相同的部分+(x和y不同的部分的和)/2)
    =((x&y)+(x^y)>>1)

二十二、Java中的一些位运算法则

  1. 判断int型变量a是奇数还是偶数
    a&1 = 0 偶数
    a&1 = 1 奇数
  2. 求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。
    (x&y)+((x^y)>>1);
  3. 对于一个大于0的整数,判断它是不是2的几次方
    ((x&(x-1))==0)&&(x!=0);
  4. 比如有两个int类型变量x、y,要求两者数字交换,位运算的实现方法:性能绝对高效
    x ^= y;
    y ^= x;
    x ^= y;
  5. 求绝对值
    int abs( int x )
    {
    int y ;
    y = x >> 31 ;
    return (x^y)-y ; //or: (x+y)^y
    }
  6. 取模运算,采用位运算实现:
    a % (2^n) 等价于 a & (2^n - 1)
  7. 乘法运算 采用位运算实现
    a * (2^n) 等价于 a << n
  8. 除法运算转化成位运算
    a / (2^n) 等价于 a>> n
  9. 求相反数
    (~x+1)
    10 a % 2 等价于 a & 1
    当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。

二十三、并行和并发区别

  1. 并行是指两者同时执行一件事,比如赛跑,两个人都在不停的往前跑;
  2. 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率
0 0
原创粉丝点击