java的二进制_java 二进制 位运算符

packageBinary;public classBinaryTag {static classGoods {privateString name;private inttag;publicGoods() {}public Goods(String name, inttag) {this.name =name;this.tag =tag;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetTag() {returntag;

}public void setTag(inttag) {this.tag =tag;

}

}classTag {public final static int None = 0; //没有标记

public final static int All = -1; //全部标记 1111 …… 1111

public final static int Promotion = 1; //促销标记 0001

public final static int Genuine = 2; //正品标记 0010

public final static int Double11 = 4; //双十一 0100

public final static int Double12 = 8; //双十二 1000

}/***@paramargs*/

public static voidmain(String[] args) {

Goods nike= new Goods("Nike", Tag.None);

System.out.print("标为正品;");

mark(nike, Tag.Genuine);

System.out.print("参加促销;");

mark(nike, Tag.Promotion);

System.out.print("参加双十一;");

mark(nike, Tag.Double11);

System.out.println("不参加双十二;");

clearMark(nike, Tag.Double12);

descGoods(nike);

System.out.println("不促销了,也不参加双十一了;");

clearMark(nike, Tag.Promotion+Tag.Double11);

descGoods(nike);

System.out.println("反转双十一和双十二的标记;");

reverseMark(nike, Tag.Double11+Tag.Double12);

descGoods(nike);

System.out.println("反转双十一和双十二的标记;");

reverseMark(nike, Tag.Double11+Tag.Double12);

descGoods(nike);

System.out.println("添加全部标记;");

markAll(nike);

descGoods(nike);

System.out.println("清除所有标记;");

clearAllMark(nike);

descGoods(nike);

}/*** 添加某种标记

*@paramgoods

*@paramtag*/

public static void mark(Goods goods, inttag) {int oldTag =goods.getTag();//将tag位 置为1 引用 [2.2) 1 | R = 1; 0 | R = R; R | R = R;]

int newTag = (oldTag |tag);

goods.setTag(newTag);

}/*** 打上所有的标记

*@paramgoods*/

public static voidmarkAll(Goods goods) {

goods.setTag(Tag.All);

}/*** 消除商品tag

*@paramgoods

*@paramtag*/

public static void clearMark(Goods goods, inttag) {int oldTag =goods.getTag();int newTag = (oldTag & (~tag));

goods.setTag(newTag);

}/*** 消除全部标记

*@paramgoods*/

public static voidclearAllMark(Goods goods) {

goods.setTag(Tag.None);

}/*** 对指定标记进行反转

*@paramgoods

*@paramtag*/

public static void reverseMark(Goods goods,inttag) {int oldTag =goods.getTag();int newTag = (oldTag ^tag);

goods.setTag(newTag);

}/*** 是否打了这种标记

*@paramgoods

*@paramtag

*@return

*/

public static boolean isTaged(Goods goods, inttag) {int oldTag =goods.getTag();return tag == (oldTag &tag);

}public static voiddescGoods(Goods goods) {

System.out.print(goods.getName()+":");

System.out.print((isTaged(goods, Tag.Promotion)?"":"不") + "参加促销;");

System.out.print((isTaged(goods, Tag.Genuine)?"":"不") + "是正品;");

System.out.print((isTaged(goods, Tag.Double11)?"":"不") + "参加双十一;");

System.out.print((isTaged(goods, Tag.Double12)?"":"不") + "参加双十二;");

System.out.println("\n");

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值