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

前两天有个朋友跟我描述了一个这样的需求: 

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,今天的内容就这些啦~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Songlcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值