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的一次方,以此类推
  • 右移同理
posted @ 2025-03-03 21:53  QAQ001  阅读(18)  评论(0)    收藏  举报