您的位置:首页 > 其它

项目需求分析:使用 >> & 操作符实现混合匹配

2017-01-05 10:54 267 查看
前两天有个朋友跟我描述了一个这样的需求: 

1住宅  2别墅  4商铺  8写字楼  16酒店式公寓

后台传给前端7就代表选择了 1 + 2 + 4  ,即住宅,别墅,商铺。

传10就是2+8,即别墅,写字楼。

这种方式在前端该如何实现匹配。

其实要解决这个问题的方法很多,区别就在于使用简洁的代码与否。

这个问题的核心所在就是java中与或操作符以及位移操作符的使用,先来了解下这两个操作符:

(1)>> 、<< 位移操作符

<< :左移运算符,例如 num << 1,即相当于 num / 2

>> :右移运算符,例如 num >> 1,即相当于 num*2

举个栗子:

如果num = 10,那么10 << 1,即10 /2=5;

10是十进制数,转换为二进制为:1010,那么10 << 1,即向左移一位,那么后面补0,即变成 10100。10100转换为十进制就是5.反之,以此类推即可。

(2)& 、&& 与操作符

&&操作符相信大家都不陌生,在java中我们经常用到对条件的判断,例如:

if(num > 2 && num  !=  5) {

// do something

}

即当num大于2,并且不等于5,条件才成立,当num不大于2时,if语句将结束,&&后面的判断将不再执行。

&操作符的区别就是不管第一个条件是否成立,第二个条件都将执行,

按位“与”的计算是把两个数字分别写成二进制形式,然后按照每一位判断,&计算中,只要有一个是0就算成0。

ok,了解了两个操作符的作用,我们回到开始所说的问题,此时相信大家都有了解决的思路,来看核心伪代码:



上面代码中,我们遍历了每个类型,然后拿后台给我们的类型做右移操作,并将结果和1做按位与操作,即可得到最终的结果。

例如,num=10,那么result就是2和8。

针对这个问题,还有一种解决方式:



上述代码只是拿类型值去做按位与操作也是可以的。

ok,今天的内容就这些啦~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐