Java基础系列---操作符

  还记得我们刚开始学习Java的时候记住优先级和逻辑运算符就可以开始工作了,昨天在看到源码的时候发现一个操作符 |=,没有印象,然后去搜了下,发现提到的文章也很少,今天去看了一下官文,然后去google找了一圈,总结下来,供自己和大家参考。

  Java 提供一套丰富的操作运算符:

    • 算术运算符
    • 关系运算符
    • 按位运算符
    • 逻辑运算符
    • 赋值运算符
    • 其他

算术运算符

  算术运算符和我们在数学中使用的一样,就是 +  -   *   /等。

符号 示例
+(加法) A + B 
-   (减法) A  - B
*(乘法) A * B
/ (除法) A / B  比如 8 / 3 = 2(只取小数点之前的数字)
%(取余) A % B 比如 8 % 3 = 2 (取余数)
++  ++A 或者 A++ (第一个是返回之前加1,后面的是返回后加1)
-- 与 ++ 同理

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

关系运算符

比较用

符号 示例
 == (等于) A == B
!= (不等于) A  != B
>(大于) A > B
<(小于) A < B
>= (大于或者等于) A>=B
<= (小于或者等于)  A<=B)

 

 

 

 

 

 

 

 

 

 

 


 

按位运算符

Java中有几个按位运算符,用于long, int, short, char 和byte

比如 a = 16, 00010000(在Java中,所有数据类型都是补码表示的,8位二进制为了方便直观的观看

         b = 3,00100000

-------------------------------------

a & b 

    a : 0 0 0 1 0 0 0 0

     b : 0 0 1 0 0 0 0 0

等于 : 00000000

第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0

---------------------------------------

a | b 

    a : 00010000

     b : 00100000

等于 : 00110000

与&的运算正好相反,只要有一位是1,结果就是1

---------------------------------------

a ^ b 

    a :  00010000

     b : 00100000

等于 : 00110000

第一个数与第二个数是否相反,是的话就是1,不是就是0

---------------------------------------

~a 

    a :    0001 0000

等于:

操作数的第n位为1,那么结果的第n位为0,反之

在Java中,所有数据类型都是补码表示的,没有特殊说明,默认是int,int长度是8位,1为是4字节,就是32字节。

所以上面的a 正确的表示是(补码)00000000 00000000 00000000  00010000

          然后取反是11111111 11111111 11111111 11101111

到这里并没有结束,因为高位是1,所以结果会变为负数,负数的补码是其绝对值的原码取反,末尾再加1。

我们先末尾加1变为11111111 11111111 11111111 11101110 (这里是负数,负数 + 1)

然后负数取反变为 00000000 00000000 0000000 00010001

转换为 - 17

这里的这个负数加一 一定要注意,要不就像我一样,算半天始终不正确

--------------------------------------

在上边提到了补位的问题,其中上边已经提到了Java中所有数据都是以补位码形式存在的

我们这里再强调下,正数的原码、补码反码是一样的,负数的高位也就是符号位是1,补码和反码都是原码反过来 + 1.至于细节,我们在以后写出

----------------------------------------

至于<< 和>> 就简单了,只是在二进制的基础上 向左或者向右调整,即可。

在Java中 很多底层都用这种方法来处理数据,因为底层是用二进制进行表示的,直接用二进制进行处理当然是性能很高的

 

符号 描述
 &(按位和) 第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0。
 | (按位或) A  |  B
^(按位异或) A ^ B
〜(按位赞美) A ~ B
<<(左移) A<<B
>>(右移)  A>>B
>>>(零填充右移) A >>>B 不管正负标志位,总是整体右移,左边用0来填充,右边舍弃

 

 

 

 

 

 

 

 

 

 

 


 

逻辑运算符

符号 描述
&& 逻辑与运算符,2个条件为真才为真,这里有短路情况
|| 逻辑或运算符,只要有一个为真,就为真
逻辑非运算符,用于取反结果

 

 

 

 

 

 

 


 

 

赋值运算符

 

操作符 描述 例子
= 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C
+ = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C + = A等价于C = C + A
- = 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C - = A等价于C = C -
 A
* = 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C * = A等价于C = C * A
/ = 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C / = A等价于C = C / A
(%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A
<< = 左移位赋值运算符 C << = 2等价于C = C << 2
>> = 右移位赋值运算符 C >> = 2等价于C = C >> 2
&= 按位与赋值运算符 C&= 2等价于C = C&2
^ = 按位异或赋值操作符 C ^ = 2等价于C = C ^ 2
| = 按位或赋值操作符 C | = 2等价于C = C | 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

摘自https://www.tutorialspoint.com/java/java_basic_operators.html

上面标红的3列,大家可能要额外看一下。

 

 


 

 

其他

 

条件运算符

variable x = (expression) ? value if true : value if false
比如 int a = a == 3 ? 1 : 2;

 

instanceof运算符

( Object reference variable ) instanceof  (class/interface type)

这里就是一个简单的验证 某类是否是某个类的子类

 

posted @ 2018-10-18 15:17  haoming1100  阅读(111)  评论(0编辑  收藏  举报
本文作者: haoming1100 博客链接: http://www.cnblogs.com/haoming1100 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载时必须带上原文链接!