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时,结果位才为1,否则为0。
参与运算的数以补码方式出现。
例如:9&5可写算式如下:
00001001 (9的二进制补码)
&00000101 (5的二进制补码)
00000001 (1的二进制补码)
可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。
例如把a 的高八位清 0 ,保留低八位,可作a&255运算(255 的二进制数为0000000011111111)。
按位或运算
按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。
只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下:
00001001
|00000101
00001101 (十进制为13)
可见9|5=13
按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
参与运算数仍以补码出现,
例如9^5可写成算式如下:
00001001
^00000101
00001100 (十进制为12)
求反运算
求反运算符~为单目运算符,具有右结合性。
其功能是对参与运算的数的各二进位按位求反。
例如~9的运算为:
~(0000000000001001)
结果为:1111111111110110
左移运算
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
例如:
a<<4
指把a的各二进位向左移动4位。
如a=00000011(十进制3),左移4位后为00110000(十进制48)。
右移运算
右移运算符“>>”是双目运算符。
其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:
设 a=15,
a>>2
表示把000001111右移为00000011(十进制3)。