关于位操作处理

关于位操作处理
今天遇到一个小问题,位操作。
也就是说一个字段,比如说频道,频道A为1,频道B为2,频道C为4,频道D为8,频道E为16
某解说员同时在A、B、D三个频道都有工作,也就是说他的频道值就为1+2+8=11,今天从数据库里取出来判断他是否属于某个频道就是我的困扰,下面就是解决例子
package com.neusoft.dxz.module.user.mapper;

import com.google.common.collect.Lists;
import com.neusoft.features.enums.ChannelEnum;
import java.util.List;

public class ss {

//   DB中用户表的Channel字段
//   `channel` int(11) NOT NULL DEFAULT 0 COMMENT '所属频道(1:语培 2:留学 4:移民... 位操作)',

/**
 * 这是从用户表读取的,假设为6,即有留学、移民两个频道的权限
 */
private static Integer channel = 6;

public static void main(String[] args) {
    // 是否有语培频道权限
    System.out.println(hasChannelAuth(ChannelEnum.LANGUAGE.value()));
    // 是否有留学频道权限
    System.out.println(hasChannelAuth(ChannelEnum.ABROAD.value()));
    // 是否有移民频道权限
    System.out.println(hasChannelAuth(ChannelEnum.IMMIGRANT.value()));

    // 获取有权限的全部频道列表
    System.out.println(allAuth());
}

/**
 * 判断是否有某个频道的权限
 * @param c
 * @return 有权限/无权限
 */
private static boolean hasChannelAuth(Integer c){
    return (c & channel) == c;
    0 00000;
    1 00001;
    2 00010;
    4 00100;
    8 01000;

    6 0110;


    20 10100;
}

/**
 * 获取有权限的所有频道列表(文字)
 * @return 频道列表(文字)
 */
private static List<String> allAuth() {
    List<String> auths = Lists.newArrayList();

    for (ChannelEnum e : ChannelEnum.values()) {
        // 循环频道枚举,与数据库获取的权限做与操作,判断是否有相关频道权限
        if ((e.value() & channel) == e.value()) {
            auths.add(e.name());
        }
    }
    return auths;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值