项目需求分析:使用 >> & 操作符实现混合匹配
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,今天的内容就这些啦~
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,今天的内容就这些啦~
相关文章推荐
- 开源->一步步实现cnblogs博客采集工具->对项目需求的分析
- Masonry的使用->在项目中使用Masonry实现自动布局Autolayout(1)
- 使用T-SQL实现数据导出/导入(SQLSERVER—>SQLSERVER)
- java 使用正则Pattern等实现【搜索 -> 提取 -> 分割 -> 替换】功能
- <Linux+Qt>使用Qt实现单例模式
- Dojo 创造项目, Build 使用 <16>
- C#使用比较操作符(!=、<、>、<=、>=)的字符串构造Lambda表达式树,并生成委托执行
- <车载物联网项目,视频采集传输部分,第三天> 使用ffserver输出视频文件流,并且使用使用命令行终端播放视频文件
- <java><JTable>使用AbstractTableModel & JTable实现号码的分布图(初稿)
- 实现下拉内容从数据库中动态读取--->Struts标签:和LabelValueBean的使用
- 使用批处理实现启动和停止服务的代码分析(net start&net stop)
- &lt;转&gt;RestKit在iOS项目中的使用,包含xcode配置说明
- CxImage的简单使用(编译-->项目设置-->代码示例(PNG透明贴图))
- [MySQL 工具] pt-index-usage使用 --> 对查询中的索引进行分析
- 【堆调试工具】pageheap的使用和原理分析&Linux下相似的功能实现
- 使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析
- 写一个MyList<T>的类,内部用T[]实现(不能使用系统的List<T>类),需要实现的接口如下:
- 分析shell命令中 >/dev/null 2>&1的语法实现原理
- 如何得到类成员函数的指针(操作符.×和->*的使用)
- <车载物联网项目,视频采集传输部分,第二天> 使用ffserver输出视频文件流,并且使用使用命令行终端播放视频文件