Java 运算符
2022-08-02 本文已影响0人
Tinyspot
运算符
- 算数运算符
- 两个操作数:
+ - * / %
- 一元运算符:
++ --
递增/递减
- 两个操作数:
- 赋值运算符
= += -= *= /= %=
- 关系运算符
> < >= <= == !=
- 逻辑运算符
&& || !
- 三元运算符
expression ? result1 : result2
int value = 1;
boolean flag = value == 1 ? true : false;
运算符优先级
进制
二进制:0, 1
八进制:0~8
十进制:0~9
十六进制:09、AF
进制转换:
十进制转二进制:除 2 取余数,逆序排列
位运算
位运算:按二进制位(bit)进行运算
按位运算符:& | ^ ~
布尔运算符
& 与 && 运算结果一样,只不过 && 会短路
布尔运算符通常用于布尔值,而按位运算符通常用于整数值
布尔运算符是短路,但按位运算符不是短路
位移运算符
- >> 带符号右移,符号位不动,其余位右移,符号位后边正数补0,负数补1
- >>> 无符号右移,符号位一起右移,左边补0
- << 左移,右边补
- byte 和 short 会先转换为 int 再进行移位
按位与(&)
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
“与运算”的用途:
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
(2)取一个数中指定位
取 X 的低4位,用 X & 0000 1111 = 0000 1110
即可得到;
按位或(|)
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
用途:
(1)常用来对一个数据的某些位置1。
方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。
例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。
按位异或(^)
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
用途:
(1)使特定位翻转找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可
(2)与 0 异或,保留原值 ,X ^ 0000 0000 = 1010 1110。
按位取反(~)
运算规则:~1=0; ~0=1;
复合赋值运算符
运算符 | 示例 | |
---|---|---|
&= | a &= b | a = a & b |
&|= | a |= b | a = a |b |
^= | a ^= b | a = a ^ b |
>>= | a >>= b | a = a >> b |
<<= | a <<= b | a = a << b |
不同长度的数据进行位运算,系统会将二者按右端对齐,然后进行位运算。
掩码操作
/**
* 掩码(MASK)
* 标识符,每个bit表示一种状态
*/
public static void main(String[] args) {
int base = 1;
// 0001
int is_dev_mask = base;
// 0010
int is_en_mask = base << 1;
// 0100
int is_alt_mask = base << 2;
// 0101
int value = 5;
// 0101 & 0001 = 0001
boolean isDev = (value & is_dev_mask) != 0;
// 0101 & 0010 = 0000
boolean isEn = (value & is_en_mask) != 0;
}