开发技巧:如何能一个字段表示八个状态?

博客介绍了如何通过位运算在一个字段中表示多个状态,以解决如课程作业提交状态记录等需求。讨论了位与、位或、位非等位运算符的使用,并提供了实战操作示例,展示了位运算在节省内存和提高运算效率方面的优势,同时也指出了其在调试和扩展性上的挑战。
摘要由CSDN通过智能技术生成

一、惊现问题

有一天,突然来了一个需求,问小明提交了哪些课程的作业?

  • A:语文 B:数学 C:英语 D:物理 E:化学 F:生物 G:历史 H:地理 .....这么多课程.....我要8个字段? 万一还有课程呢?我还要再加字段?
  • 我肯定不慌啊,我一个字段搞定。

二、解决之道

通过一个 int或者long 字段,来添加多个 标志或者状态. 一个int或者long字段,能够管理多个标记(状态)值. 如此神奇的操作怎样实现的呢? 答案就是通过位运算来实现.

  • 像这种,独立状态(标记)之间相互组合可以产生新的状态(标记),且每个独立状态(标记)只有true或者false值的,我们可以使用位状态的概念来管理这些状态.
  • 它的核心思想就是将, int 数值看做是 二进制数位表示.如果有四个状态就可以像这样 0000,用四位二进制表示,每一个二进制位都可以表示一种状态. 然后通过 位运算,来提取或添加标记位.四位对应的组合状态有16个. 而我们,只需要通过一个int变量就能够管理这些状态.
  • 当参与的状态(标记)越多时,如果使用单独的标记变量,就需要生成越多的变量,而用位域,这种独立状态为不管有多少个,都可以用一个变量表示.int类型最多存放32个独立状态.
  • 位操作基础:

java中提供的基础位运算符有 与(&),或(|),非(~),异或(^),左移<<,右移(>>)和无符号右移(>>>).

除了位非(~)是一元操作符外,其它的都是二元操作符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值