使用位运算,处理"多选状态标识"

public class sss {

    public static void main(String[] args) {
        //极不易发
        int a = 1;
        //不易发
        int b = 2;
        //较易发
        int c = 4;
        //易发
        int d = 8;
        //极易发
        int e = 16;
        //觉不易发f
        int f = 32;

//        上面定义或者下面这种定义都可以

        int COST_ASSET = 1 << 0;
        int COST_GOLD = 1 << 1;
        int COST_BINDGOLD = 1 << 2;
        int COST_SOPH = 1 << 3;
        int COST_STRSOUL = 1 << 4;
        int COST_REFSOUL = 1 << 5;
        System.out.println(COST_ASSET);
        System.out.println(COST_GOLD);
        System.out.println(COST_BINDGOLD);
        System.out.println(COST_SOPH);
        System.out.println(COST_STRSOUL);
        System.out.println(COST_REFSOUL);

        isequals(40,32);
    }


    /**
     * 增加状态(按位或)
     * @param source 原有状态
     * @param addMum 增加的状态
     * @return
     */
    public  static int add (int source,int addMum){

        return source|addMum;
    }

    //下面2种运算都可以扣除状态
    /** 1跟2都可以
     * 扣除该状态 (按位异或运算)
     * @param source
     * @param delMum
     * @return
     */
    public static int del(int source,int delMum){
        return source^delMum;
    }

    /**1跟2都可以
     * 扣除该状态 (按位异与再取反)
     * @param source
     * @param delMum
     * @return
     */
    public static int del1(int source,int delMum){
        return source&~delMum;
    }

    /**
     * 是否包含状态如果大于0则包含
     */
    public static void isequals(int a,int b){
        System.out.println(a&b);
    }

}

按位与运算

 

 
  1. 按位与运算符"&"是双目运算符。
  2. 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。
  3. 参与运算的数以补码方式出现。
  4.  
  5. 例如:9&5可写算式如下:
  6. 00001001 (9的二进制补码)
  7. &00000101 (5的二进制补码)
  8. 00000001 (1的二进制补码)
  9. 可见9&5=1。
  10.  
  11. 按位与运算通常用来对某些位清0或保留某些位。
  12. 例如把a 的高八位清 0 ,保留低八位,可作a&255运算(255 的二进制数为0000000011111111)。

 

 

按位或运算

 

 
  1. 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。
  2. 只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
  3.  
  4. 例如:9|5可写算式如下:
  5. 00001001
  6. |00000101
  7. 00001101 (十进制为13)
  8. 可见9|5=13

 

 

按位异或运算

 

 
  1. 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
  2. 参与运算数仍以补码出现,
  3.  
  4. 例如9^5可写成算式如下:
  5. 00001001
  6. ^00000101
  7. 00001100 (十进制为12)

 

 

求反运算

 

 
  1. 求反运算符~为单目运算符,具有右结合性。
  2. 其功能是对参与运算的数的各二进位按位求反。
  3.  
  4. 例如~9的运算为:
  5. ~(0000000000001001)
  6. 结果为:1111111111110110

 

 

左移运算

 

 
  1. 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
  2.  
  3. 例如:
  4. a<<4
  5. 指把a的各二进位向左移动4位。
  6.  
  7. 如a=00000011(十进制3),左移4位后为00110000(十进制48)。

 

 

右移运算

 
  1. 右移运算符“>>”是双目运算符。
  2. 其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
  3.  
  4. 例如:
  5. 设 a=15,
  6. a>>2
  7. 表示把000001111右移为00000011(十进制3)。

 

 

参考:https://blog.csdn.net/fly910905/article/details/75040946

https://blog.csdn.net/u010746364/article/details/50259205

你可能感兴趣的:(java)