位运算 java和mysql都有对应的操作


/**
 * 位运算的运用-权限控制,add,query,modify,del
 */
public class Permission {

    private static final int ALLOW_SELECT = 1<<0;
    private static final int ALLOW_INSERT = 1<<1;
    private static final int ALLOW_UPDATE = 1<<2;
    private static final int ALLOW_DELETE = 1<<3;

    //当前的权限状态
    private int flag;

    public void setPermission(int permission){
        flag = permission;
    }


    /*增加权限,可以一项或者多项*/
    public void addPermission(int permission){
        flag = flag|permission;
    }

    /*删除权限,可以一项或者多项*/
    public void disablePermission(int permission){
        //相当于减操作,不过前提是8421位上有的才行
        flag = flag&~permission;
    }

    /*是否拥有某些权限*/
    public boolean isAllow(int permission){
        return (flag&permission)==permission;
    }

    /*是否不拥有某些权限*/
    public boolean isNotAllow(int permission){
        return (flag&permission)==0;
    }


    public static void main(String[] args) {
        // 8421
		int flag = 15; // 1111
        System.out.println(Integer.toBinaryString(flag));
		Permission permission = new Permission();
		permission.setPermission(flag);

        System.out.println(ALLOW_SELECT);
        System.out.println(ALLOW_INSERT);
        System.out.println(ALLOW_UPDATE);
        System.out.println(ALLOW_DELETE);
        // 不让删除和增加
        permission.disablePermission(ALLOW_DELETE|ALLOW_INSERT);
		System.out.println("ALLOW_SELECT="+permission.isAllow(ALLOW_SELECT));
		System.out.println("ALLOW_INSERT="+permission.isAllow(ALLOW_INSERT));
		System.out.println("ALLOW_UPDATE="+permission.isAllow(ALLOW_UPDATE));
		System.out.println("ALLOW_DELETE="+permission.isAllow(ALLOW_DELETE));
	}
}

/*
* 位运算
* */
public class IntToBinary {
	
    public static void main(String[] args) throws UnsupportedEncodingException {

        System.out.println("the 4 is : " + Integer.toBinaryString(4));
        System.out.println("the 6 is : " + Integer.toBinaryString(6));
        //位与&(真真为真 真假为假 假假为假)
        System.out.println("the 4&6 is : " + Integer.toBinaryString(6&4));
        //位或|(真真为真 真假为真 假假为假)
        System.out.println("the 4|6 is : " + Integer.toBinaryString(6|4));
        //位非~
        System.out.println("the ~4 is : " + Integer.toBinaryString(~4));
        //位异或^(真真为假 真假为真 假假为假)
        System.out.println("the 4^6 is : " + Integer.toBinaryString(6^4));
        //有符号右移>>(若正数,高位补0,负数,高位补1)
        System.out.println("the 4>>1 is : " + Integer.toBinaryString(4>>1));
        //有符号左移<<(若正数,高位补0,负数,高位补1)
        System.out.println("the 4<<1 is : " + Integer.toBinaryString(4<<1));
        //无符号右移>>>(不论正负,高位均补0)
        System.out.println("the 234567 is : " + Integer.toBinaryString(234567));
        System.out.println("the 234567>>>4 is : " + Integer.toBinaryString(234567>>>4));
        //无符号右移>>>(不论正负,高位均补0)
        System.out.println("the -4 is : " + Integer.toBinaryString(-4));
        System.out.println("the -4>>>4 is : " + Integer.toBinaryString(-4>>>4));
        System.out.println(Integer.parseInt(Integer.toBinaryString(-4>>>4), 2));
        
        //取模a % (2^n) 等价于 a & (2^n - 1) 
        System.out.println("the 345 % 16 is : " + (345%16)+" or "+(345&(16-1)));

        System.out.println("Mark hashCode is : "+"Mark".hashCode()+"="
        		+Integer.toBinaryString("Mark".hashCode()));
        System.out.println("Bill hashCode is : "+"Bill".hashCode()+"="
        		+Integer.toBinaryString("Bill".hashCode()));

    } 
}


mysql操作

 select 6&~4   正确操作,6 由2和4合成(110)可以减100 -> 2 (10)
 
  select 8 &~ 4    不正确操作,原因8为1000 减不了 100
  
    UPDATE `market_wd_shop` A  SET A.delivery_type= A.delivery_type&~4 WHERE id=14959484
   
   SELECT 10 | 15 , 9 | 4 | 2 ;
   
   SELECT 5 &~1 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值