Java运算符(位运算)_7
| 普通运算符 | 描述 |
|---|---|
| % | 取模(求余) |
| ++,-- | 自增或自减 前缀(++a):先自增,再使用值。 后缀(a++):先使用值,再自增。 |
| && | 逻辑与(AND) |
| || | 逻辑或(OR) |
| += | 加后赋值 |
| ? : | 条件运算符:int max = (a > b) ? a : b |
| instanceof | if (obj instanceof String) 检查对象是否属于某个类或其子类 |
| 一些注意点 |
|---|
| (10/4=2)、(10.0/4=2.5) |
取模%:a%b=a-(int)a/b*b |
| && 和 ||是短路运算符,如果第一个表达式不成立则不会计算第二个 |
对于i=i++来说会使用临时变量:1. temp = i; 2. i = i+1 3. i = temp |
位运算
位运算符:用于对整数的二进制位进行操作
| 位运算符 | 描述 位运算按照数的补码进行运算,运算完成后结果转回原码 |
|---|---|
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 异或:相同为0,不同为1 |
| ~ | 按位取反 |
| << | 左移 |
| >> | 右移(带符号) 如果原数是负数,右移后高位补充 1;如果原数是正数,右移后高位补充 0 通常是在需要保持负数的符号时 |
| >>> | 右移(无保留符号) 在右移时不考虑符号位,始终在高位补充 0 通常是在处理无符号数或需要将负数转换为正数的情况下 |
- 左移 (<< )n位相当于乘以2的n次方 (十进制)
- 右移 (>> )n位相当于除以2的n次方
- 无符号右移 (>>> )n位相当于除以2的n次方,但结果总是正数
为什么左移不需要区分有无符号而右移需要?
- 左移对正数和负数的处理方式是一致的(既最低位补0),因此不需要区分带符号和不带符号
- 右移则需要确定是对高位补0还是补1
为什么左移右移n位相当于十进制乘或除2的n次方?
- 二进制转换十进制的方式决定了上述结论,比如一个二进制数转十进制:(1*2的3次方+1*2的1次方)左移一位后变为(1*2的4次方+1*2的2次方),相当于乘上了2的一次方,以此类推
- 右移同理

浙公网安备 33010602011771号