一、位状态

一.位状态概述


1、什么是位状态

在计算机科学中,位状态(Bit State)是指在计算机系统中用来表示信息的最小单位。"位"是二进制数字的缩写,表示二进制位(binary digit)。

位状态只能表示两种不同的状态,通常用0和1表示。这两种状态可以分别表示逻辑上的"假"和"真",或者是其他不同的含义,具体取决于上下文和所采用的编码规则。

计算机系统中的所有数据和指令都可以通过位状态进行表示和处理。计算机内部的所有操作都是基于位状态的逻辑运算,如与(AND)、或(OR)、非(NOT)等。通过对位状态进行组合和处理,计算机可以实现复杂的计算和逻辑操作。

位状态的组合形成了更高级别的数据表示,如字节(byte)、字(word)、整数、浮点数等。这些数据类型由多个位状态组成,可以表示更大范围的数值和更复杂的数据结构。

位状态在计算机科学中起着重要的作用,是数字信息处理的基础。它不仅在硬件层面上存在,也在软件和算法中广泛应用。——ChatGPT3.5

2、实际开发中的位状态

位状态就是以int或者long数字的二进制来表示状态

int有32位,最多就可以来表示32种属性的状态

long有64位,最多就可以用来表示64种属性的状态

202208212206813.png
2023-06-28_191237.png

3、为什么需要位状态

  • 在实际开发当中,我们经常需要记录用户的账户安全、用户权限状态等等,那么这时候我们通常会涉及一个位状态字段来表示多个状态,这时候我们就需要用到位状态

image.png
image.png

2.位状态使用


1、导入位状态工具类

  • 在工具类中已经约定好了每个状态对应的值
package com.cyx.yxcc.util;

/**
 * 用户状态类,记录用户在平台使用系统中所有的状态。
 * @author nixianhua
 */
public class BitStatesUtils {

	/**
	 * 用户注册成功的标示,及为默认初始状态
	 */
	public final static long OP_REGISTED = 1L << 0;
	/**
	 * 是否已激活(认证手机或认证邮箱)。
	 */
	public final static long OP_ACTIVED = 1L << 1;
	/**
	 * 是否锁定(未锁定则没有该状态),安全监测程序/后台对用户的锁定操作。
	 */
	public final static long OP_LOCKED = 1L << 2;
	/**
	 * 是否手机认证
	 */
	public final static long OP_AUTHED_PHONE = 1L << 3;
	/**
	 * 是否邮箱认证
	 */
	public final static long OP_AUTHED_EMAIL = 1L << 4;

	/**
	 * 是否完善个人信息
	 */
	public final static long OP_SAVE_BASIC_INFO = 1L << 5;

	/**
	 * 是否正在进行实名认证
	 */
	public final static long OP_IDENTITY_AUTHING = 1L << 6;

	/**
	 * 是否完成实名认证
	 */
	public final static long OP_IDENTITY_AUTHED = 1L << 7;
	/**
	 * 是否初始化支付密码
	 */
	public final static long OP_INIT_PAY_PASSWORD = 1L << 8;

	/**
	 * @param states 用户当前状态值
	 * @param value  需要判断状态值
	 * @return 是否存在
	 */
	public static boolean hasState(long states,long value){
		return (states & value) == value;
	}

	/**
	 * @param states 已有状态值
	 * @param value  需要添加状态值
	 * @return 新的状态值
	 */
	public static long addState(long states,long value){
		if(hasState(states, value)){
			return states;
		}
		return (states | value);
	}

	/**
	 * @param states 已有状态值
	 * @param value  需要删除状态值
	 * @return 新的状态值
	 */
	public static long removeState(long states,long value){
		if(!hasState(states, value)){
			return states;
		}
		return states ^ value;
	}

}

2、用户位状态初始化

   private Long saveUser(SmsRegisterDto smsRegisterDto, Long loginId) {
        String mobile = smsRegisterDto.getMobile();
        User user = new User();
        user.setPhone(mobile);
        user.setNickName(mobile);
        user.setLoginId(loginId);
        // 设置用户位状态
        long state = BitStatesUtils.addState(BitStatesUtils.OP_ACTIVED, BitStatesUtils.OP_REGISTED);
        state = BitStatesUtils.addState(state, BitStatesUtils.OP_AUTHED_PHONE);
        user.setBitState(state);
        
        insert(user);
        return user.getId();
    }

3、测试

  • 注册用户,查看初始位状态值

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值