位运算在实际项目中的应用篇

1.前言:在之前的开发中,做过物流信息节点的一个业务。分为了很多个节点信息,列举如下:

  1. 订单作废
  2. 待处理
  3. 预处理成功
  4. 运单录入成功
  5. 仓库已收件
  6. 称重完成
  7. 已付款
  8. 已打包
  9. 已出关
  10. 订单完成

从最开始的状态,到最后一个状态。假如按照顺序排序的话,你要是订单录入成功,那么你必须是已经存在了待处理和预处理成功的状态。

如果用0-10来定义十个状态的话,那么我们应该怎么去判断我当前的状态是否包含有上一个状态呢?

根据讨论:位运算是一个不错的选择。

2.下面我将用例子说明,位运算在项目中的使用

①关于爱好的例子

eg:现在我有一个爱好的需求,这些爱好有
足球  羽毛球  乒乓球  篮球  游泳
如果按照整数的形式去定义,那就有无数多种情况,毕竟可以两两组合嘛。
但是如果用位运算去做的话,那么就可以直接表示为:
假如喜欢足球的话,那么在足球定义的那一位上就标记成1,否则位0
那么 0 0 1 1 1则表示不喜欢足球和羽毛球,喜欢乒乓球和篮球还有游泳的。

②检查是否存在该爱好

//使用与运算去判断是否存在该爱好
public Boolean isStatu(Integer status){
	return (this.status & status)>0;
}
eg:
   喜欢足球的状态是:1 0 0 0 0 
   小明的喜好:     0 1 0 1 0
   与计算的结果为0 0 0 0 0,返回位false,所以小明不存在喜好足球的状态

③添加某种爱好:

//在原来的基础上添加某种爱好
public void addStatu(Integer status){
	this.status=this.status | status;
}
eg:
    喜欢足球:   1 0 0 0 0
    小明的喜好: 0 1 0 1 0 
    或运算之后: 1 1 0 1 0

④移除某种爱好:

//移除某种爱好	
public void remove(Integer status){
	this.status=this.status & ~status;
}
eg:
    (传入)喜好足球 : 1 0 0 0 0
    小明的喜好:       1 0 1 0 1
    足球取~ :         0 1 1 1 1
    与运算:           0 0 1 0 1

⑤注意事项:

在位运算中,一位代表的数位2的n-1次方。

3.下面给大家看看在项目中我们的订单实际定义是怎么样的:

/**
* 从上到下有一个顺序关系,每一个的数值都是2的n-1次方计算出来。
* 
*/ 
//订单作废
private static final Integer Order_Invalid = 0;
//待处理
private static final Integer Order_Pending = 1;
//预处理成功
private static final Integer Order_pretreatment = 2;
//运单录入成功
private static final Integer Order_WaybillInsert = 4;
//仓库已收件
private static final Integer Order_RepertoryObtain = 8;
//称重完成
private static final Integer Order_Weight = 16;
//已付款
private static final Integer Order_Pay = 32;
//已打包
private static final Integer Order_Pack = 64;
//已出关
private static final Integer Order_Export = 128;
//订单完成
private static final Integer Order_Success = 256;

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值