专栏首页步履前行Java基础系列---操作符

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)

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 系统快捷键

    Petrichor_
  • requirements.txt 介绍 & 快捷生成

      requirements.txt 文件 里面记录了当前程序的所有依赖包及其精确版本号。

    Petrichor_
  • 命名法 的 简洁归纳表

    Petrichor_
  • 主机:各线介绍 & 问题速查表

      在独立组装过八九台主机,遇坑无数后,我写下了《如何自己组装电脑(从配件到整机)来省下一大笔钱》以及《组装台式机遇坑总结》这两篇技术博客。

    Petrichor_
  • 个人理解:import scipy语句 为什么不能导入 scipy.misc.imsave 模块

    Petrichor_
  • 显示器 设置选项 解析

    Petrichor_
  • 忘记密码时,如何查看之前Chrome浏览器保存的密码

    Petrichor_
  • 像素、分辨率 区别 & 介绍

    举个例子,比如一张图片由100×100个像点组成,那么这张图片的像素数就是1万。但是,如果这张图片边长为1英寸,那么其分辨率就是100点/英寸,也就是100dp...

    Petrichor_
  • Adblock:简单强大的广告过滤沙盒

      之前在使用浏览器时,经常会为太多弹窗广告所困。后来师兄教我说可以用一个叫做 AddBlock 的沙盒来过滤掉广告,遂自己上网查阅了相关资料。后来发现一个特别...

    Petrichor_
  • Dataset 列表:机器学习研究

    In computer vision, face images have been used extensively to develop face recog...

    Petrichor_

扫码关注云+社区

领取腾讯云代金券