java面试准备-day03
来源:互联网 发布:淘宝袜子好评语100字 编辑:程序博客网 时间:2024/04/27 03:20
二十一、 (x&y) + ( (x^y)>>1 )=(x+y)/2证明
- 关于二进制的所有证明,今天得到了很好的理解。对于任何一个数,首先,我们要把所有的数想成1和0之间的运算,而不是11110000和10100101之间的运算,这样才能找到规律(可能不适用于其他的运算,暂时未发现)。
- java中的二进制运算包括与&、或|、非~、异或^四种,以及几种位移运算;这里我们把所有的整数数都拆开来看:m=a0+a1*10+a2*10^2+a3*10^3+a4*10^4+。。。。这样就是所有的对二进制进行运算,再次,我们考虑一种情况,即这种运算之中不夹杂加减乘除,或者说是加减乘除不影响位运算结果的情况,这样,我们就可以,把所有的位运算看做成1和0之间的运算,具体的例子如下:
- 对于这个证明:
由于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中的一些位运算法则
- 判断int型变量a是奇数还是偶数
a&1 = 0 偶数
a&1 = 1 奇数 - 求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。
(x&y)+((x^y)>>1); - 对于一个大于0的整数,判断它是不是2的几次方
((x&(x-1))==0)&&(x!=0); - 比如有两个int类型变量x、y,要求两者数字交换,位运算的实现方法:性能绝对高效
x ^= y;
y ^= x;
x ^= y; - 求绝对值
int abs( int x )
{
int y ;
y = x >> 31 ;
return (x^y)-y ; //or: (x+y)^y
} - 取模运算,采用位运算实现:
a % (2^n) 等价于 a & (2^n - 1) - 乘法运算 采用位运算实现
a * (2^n) 等价于 a << n - 除法运算转化成位运算
a / (2^n) 等价于 a>> n - 求相反数
(~x+1)
10 a % 2 等价于 a & 1
当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。
二十三、并行和并发区别
- 并行是指两者同时执行一件事,比如赛跑,两个人都在不停的往前跑;
- 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率
0 0
- java面试准备-day03
- java面试准备-day03-并发包类
- Java面试准备
- java面试准备1
- java面试准备2
- java面试准备3
- Java面试准备4
- java面试准备5
- Java面试及准备
- Java 面试准备
- Java 面试准备[二]
- java软件工程师面试准备
- 面试准备---Java异常
- 准备java面试资料
- # Java面试复习准备
- java面试题目准备
- java研发面试准备
- java面试准备-day01
- Mozilla Location Service-8
- 北京通州规划图全面汇总
- 类与对象
- 登陆界面、事件与创意画板总结
- 类的继承、方法重写、自动转型
- java面试准备-day03
- 参数传递及内存分析
- 导入Android项目后编译出错:Unable to resolve target ‘android-19′
- SEO必看的免费推广渠道
- 数组与数组队列
- 链表
- Android中各类Dialog实例——交互
- 2015年09月22日
- LeetCode | Find Missing Positive