二进制开关实现

开发中总是存在着各种状态的保持。都是字段的话,相当麻烦。使用二进制状态存储就方便多了。现在一个int值你可以保存32个开关了。


public class a {

	/**
	 *  获取当前index状态,[0,1];
	 *  @param value     存储的开关数据int32
	 *  @param index     第几位
	 *  @return          当前位置的值
	 */
	static boolean value_bit(int value,int index){
		return ( value >> --index & 1 ) > 0;
	}

	/**
	 *  处理后的存储数据 int32
	 *  @param value     存储的开关数据int32
	 *  @param index     第几位
	 *  @param set       开关状态
	 *  @return          当前位置的值[0,1]
	 */
	static int value_bit(int value,int index,boolean set){
		index --;
		if(set){
			value = 1 << index | value;
		} else {
			value = ~(1<<index) & value;
		}
		return value;
	}


	public static void main(String[] args) {
		int data = 0;
		data = a.value_bit(data,1,true);
		data = a.value_bit(data,2,true);
		data = a.value_bit(data,3,true);
		data = a.value_bit(data,5,true);
		System.out.println("data:"+data + " data_bin:"+Integer.toBinaryString(data));

		data = a.value_bit(data,1,false);
		data = a.value_bit(data,3,false);
		data = a.value_bit(data,4,true);
		System.out.println("data:"+data + " data_bin:"+Integer.toBinaryString(data));

		System.out.println(a.value_bit(data,1));
		System.out.println(a.value_bit(data,2));
		System.out.println(a.value_bit(data,3));
		System.out.println(a.value_bit(data,4));
		System.out.println(a.value_bit(data,5));


		/** out :
		data:23 data_bin:10111
		data:26 data_bin:11010
		false
		true
		false
		true
		true
		*/
	}
}


猜你喜欢

转载自blog.csdn.net/color_wind/article/details/50132209