> 与或是运算操作,非是对二进制取反
## 与操作(有0出0,全1出1)
| 数字 | 二级制 |
| --- | --- |
| A | 1 0 1 0 |
| B | 1 1 0 0 |
| A & B | 1 0 0 0 |
## 或操作(有1出1;全0出0)
| 数字 | 二级制 |
| --- | --- |
| A | 1 0 1 0 |
| B | 1 1 0 0 |
| A` |` B | 1 1 1 0 |
## 非操作(有1出0;有0出1)
| 数字 | 二级制 |
| --- | --- |
| A | 1 0 1 0 |
| ~A | 0 1 0 1 |
## 二进制操作实例
~~~
public enum EXTEND_FLAG_ENUM {
OVER_WEIGHT(1, "超重"),
OVER_CUBAGE(1 << 1, "超方"),
LATE(1 << 2, "晚点"),
SLOW(1 << 3, "缓行");
public int value;
public String name;
EXTEND_FLAG_ENUM(int value, String name) {
this.value = value;
this.name = name;
}
public static int addFlag(int org, EXTEND_FLAG_ENUM newFlag) {
return org | newFlag.value;
}
public static int removeFlag(int org, EXTEND_FLAG_ENUM oldFlag) {
return org & (~oldFlag.value);
}
public static boolean hasFlag(int org, EXTEND_FLAG_ENUM oldFlag) {
return (org & oldFlag.value) > 0;
}
}
~~~
用4个二进制为来表示订单的状态
| 二进制 | 代表状态 | 十进制 |
| --- | --- | --- |
| 0001 | 超重 | 1 |
| 0011 | 超重,超方 | 3 |
| 1011 | 超重,超方,缓行 | 11 |
| 1111 | 超重,超方,晚点,缓行 | 15 |