Java运算符共包括这几种:算术运算符、比较运算符、位运算符、逻辑运算符、赋值运算符和其他运算符。(该图来自网络)

简单的运算符,就不过多介绍使用了,可自行测试。关于赋值运算,可以结合算术运算和位运算来简化代码。

        int a = 5;
a += a; // a = a + a;
a /= a; // a = a / a;
a %= a; // a = a % a;
a &= 6; // a = a & 6;
//.....

理解自增自减运算符

自增自减分为前置和后置。例如:i++  ++i i-- --i。 要明确一点,前置与后置的自增或自减运算符若没运用到表达式中,那么无区别;若是参与到表达式运算中,只需记住:谁在前面就先执行谁。

        int a = 0;
a++; //或者++a
System.out.println(a); // a输出1
    //最常见的for循环中,在迭代条件中,i++ 和 ++i无区别,因为没有用于表达式。

将前置自增和后置自增运用到表达式

        int a = 5;
System.out.println(a--); //5,先打印a的值,之后a自减1
System.out.println(a); //4
System.out.println(++a); //5, 先对a值自增,然后打印a值

复杂一点,更好的理解前置和后置的区别:

        int a = 6;
int b = 8;
int c = ++a + b-- - a-- + --b + b++ + --a;
System.out.printf("%d|%d|%d", a,b,c); // 5,7,25

使用图片来理解会更加一目了然。

再随便给一个,按照图示方式去理解自增自减。

        int a = 6,b = 8;
int c = (--a) + (a--) - (b--) + (++b) + (a++) - (b--); //加括号更容易阅读
// int c = --a + a-- - b-- + ++b + a++ - b--;
System.out.printf("%d|%d|%d", a,b,c); // 5,7,6
}

通过图片的理解方式去学习自增自减,无论是前置还是后置,无论会有多复杂,都可以很有条理的解决。 当然,写程序时别写这么复杂,因为没意义,这里仅是用于理解。

理解位运算符

程序中的所有数在内存中都是以二进制的形式存储,位运算符就是直接对二进制数进行操作运算,速度很快。 位运算符包括 & | ~ ^ << >> >>>。 下面会一一介绍。 其中二进制数的1表示真, 0表示假

按位与(&):若相对应位都为1,则为1,否则为0。 

15 & 5 = 5           16 & 12 = 0              18 & 14 = 2

        15  1 1 1 1                     16  1 0 0 0 0                            18  1 0 0 1 0
----------- ------------- -------------
5 0 1 0 1 12 0 1 1 0 0 14 0 1 1 1 0
----------- ------------- -------------
0 1 0 1 (十进制为5) 0 0 0 0 0 (十进制为0) 0 0 0 1 0 (十进制为2)

按位或(|):若相对应位其中一个为1,则为1,否则为0。

    9 | 11 = 11                                 5 | 20 = 21

        9   1 0 0 1                     5   0 0 1 0 1
----------- -------------
11 1 0 1 1 20 1 0 1 0 0
----------- -------------
1 0 1 1 (十进制为11) 1 0 1 0 1 (十进制为21)

按位异或(^):若相对应位互不相同,则为1,否则为0。 

      9 ^ 11 = 2          5 ^ 20 = 17

        9   1 0 0 1                     5   0 0 1 0 1
----------- -------------
11 1 0 1 1 20 1 0 1 0 0
----------- -------------
0 0 1 0 (十进制为2) 1 0 0 0 1 (十进制为17)

按位取反(~) 

假设要取反的数为n, 那么公式如下:

~n = -(n+1),正整数按位取反的数是它本身+1的负数。

 ~ -n = | -n + 1 |, 负整数按位取反的数是它本身+1的绝对值。
例如:~10 = -11; ~ -11 = 10;

按位左移和右移(<< >>):左移表示二进制数向左移动指定位数,低位补相应0填充。 右移表示二进制数向右移动指定位数,高位补相应0填充。

左移运算原理

        11  0 0 0 0 1 0 1 1                                 65   1 0 0 0 0 0 1
<<2 0 0 1 0 1 1 0 0 (低位补相应0) <<3 1 0 0 0 0 0 1 0 0 0
--------------- -------------------
101100 = 2^5 + 2^3 + 2^2 = 44 1000001000 = 2^9 + 2^3 = 520

 右移运算原理

        75  1 0 0 1 0 1 1                   65   1 0 0 0 0 0 1
>>6 0 0 0 0 0 0 1 >>3 0 0 0 1 0 0 0 [低位移除 0 0 1, 高位补相应位数0]
------------- ---------------
0001 = 1 1000 = 8

左移与右移的运算规律总结:左移几位就乘以2的几次方 , 右移几位就除以2的几次方。

4<<5 为例,就是4 * 2^5 = 4 * 32 ,很快得出结果128

10>>2 ,10除以 2的2次方  10/4 = 2。

若想快速获取2的N次方,只需 1<<N 即可,例如 1<<10 = 2 ^ 10 = 1024

理解逻辑运算符

逻辑运算符一般使用:逻辑与(&&)、逻辑或(||)和逻辑非(!)。逻辑运算符也称为短路运算。

&&表示and, 两边操作数都为真,才为真,否则为假。左边为假时,不再计算右边。 true && true = true,  false && true = false

||表示or, 两边操作数其中一个为真,则为真,否则为假。左边为真时,不再计算右边。 true || false = true,  false || false = false

!表示取反,若操作数为真,则为假;操作数为假,则为真。 !true = false  !false = true。 取反逻辑很有用,可以简化逻辑操作。

        //判断闰年  能整除400 或者 能整除4但不能整除100
if((year % 400 == 0) || (year % 4 == 0) && year % 100 != 100) //求出能同时整除5和7的数
if(num % 5 == 0 && num % 7 == 0) //求出能整除6 或者 整除8的数
if(num % 6 == 0 || num % 8 == 0) //求出能整除 7 但不能整除9的数
if(num % 7 == 0 && num % 9 != 0) //某些boolean方法, 例如判断质数。
boolean isPrime(int i) {}
//通过取反操作,求某个范围中不是质数的数。 !true = false,不执行。 !false = true,执行。
if(!isPrime()) {}

除了以上之外,另外说一下按位异或^用于逻辑运算。

            //要么整除5,要么整除8,但不能同时整除5和8。使用异或^来完成互斥逻辑
if(num % 5 == 0 ^ num % 8 == 0)
//T ^ T = false, T ^ F = true, F ^ T = true

Java运算符使用总结(重点:自增自减、位运算和逻辑运算)的更多相关文章

  1. Java基础知识——算术操作符、自增自减、关系操作符,你真的了解吗?

    三人行,必有我师焉.欢迎大家加我的微信 yh18482155461,或扫描下方二维码,关注我的微信公众号,共同探讨Java相关技术问题. 温故知新 上一节我们讲到了Java中的赋值操作符,用案例的方式 ...

  2. day03运算符、表达式、自增自减、三目运算符、程序结构、用户输入

    复习 1.java的输出语句 1)System.out.println(); 2)System.out.print(); 2.注释 1)单行注释 // 2)多行注释 /* .... */ 3.变量 1 ...

  3. javascript之自增自减典型运算(易错)

    JavaScript“自增”运算符与表达式 递增运算符(++)是一个一元运算符,该运算符可以将操作数进行递增操作,即每次增加1.递增运算符要求其操作数必须是变量.对象中的某个属性或数组中的某个元素,并 ...

  4. Java学习日记基础篇(八) —— 二进制、位运算、位移运算

    二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...

  5. Java 进制转换(二进制(负),八进制,十进制,十六进制),位运算、逻辑运算(2)

    负数的二进制表现形式:其实就是该数的绝对值取反+1. 进制转换(二进制,八进制,十进制,十六进制),原理解析 十六进制的表现形式: (2)(与.异或.左移.右移.三元运算符)

  6. Java学习笔记之:java运算符

    一.介绍 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算 ...

  7. 关于运算符的那些坑—自增x++&&++y

    题目 比较常见的问题,因为比较细,看书的时候一不注意可能就过去啦,但是遇到的时候就会容易出问题.先看下面程序,考虑一下运行结果是什么呢? int x = 1, y = 1; if(x++ == 2 & ...

  8. 运算符:三目运算符,运算符优先级,sizeof,自增自减,取余

    一://---------运算符-----------// 1.运算符是告诉编译程序执行特定算术或逻辑操作的符号. 2.按照功能划分: 算术运算符. 关系运算符与逻辑运算符.按位运算符. 3.运算符根 ...

  9. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

随机推荐

  1. Excel 2016 for Mac

    1. Excel for Mac 的 Developer tab下没有XML组,因此无法从xml导入或者导出到xml: 2. Excel for Mac 中没有Mark as Finnal的功能: 3 ...

  2. Jmeter与LoadRunner的异同

    1.jmeter的架构跟loadrunner原理一样,都是通过中间代理,监控&收集并发客户端发现的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈的结果的一个过程. 2.分布式中间代 ...

  3. 软工读书笔记 week2

    <程序员修炼之道>这本书后面一部分则是更深入.更具体.更细致地就程序员应该注意的事项做一些讨论,书中说的很多在过去的经历中都有较深的体会,同时也给了我很多启发.以下是一些我感悟较深的点: ...

  4. java indexOf 和 split的用法

    1.java 的 indexOf 方法 ,如果存在 则 指定的字符串的开始位置,如果不存在 则返回-1: 2.java 的 split的方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. ...

  5. .net core系列之《sdk和runtime区别及使用CLI在Ubuntu上快速搭建Console,WebApi,MVC三大应用模型》

    一.需要安装的软件 1.虚拟机安装Ubuntu系统(本人用的是vmware-14.1.12和buntu-18.04) 2.Xshell或 Putty(连接ssh服务) 3.FileZilla(ftp上 ...

  6. OS考研复习笔记——操作系统的定义、目标、作用和发展的主要动力

    计算机系统由硬件和软件两部分组成.操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次补充. 硬件:计算机物理设备,即各种处理机存储器.输入/输出设备 ...

  7. time random sys 模块

    time模块 顾名思义就是时间模块 我们在之前就用过一些时间模块 比如你想要让打印的时间延迟就time.sleep() 首先我们知道这是一个时间操作的模块 它可以分为三种模式:时间戳模式.格式化时间模 ...

  8. Python学习---django下的cookie操作 180201

    什么是Cookies 什么是Cookies cookies设置的原因: 1. http请求的无记忆性: 2.加快访问速度  3. 减少服务器压力 cookies特点: cookies保存在客户端浏览器 ...

  9. Java学习---Map的学习

    1. Map 1.1. map中的方法 1.2. Map.Entry 对于集合来讲,就是把kye-value的数据保存在了Map.Entry的实例之后,再在Map集合中插入了一个Map.Entry的实 ...

  10. matlab中的knn函数

    knn 最邻近分类 Class = knnclassify(test_data,train_data,train_label, k, distance, rule) k:选择最邻近的数量 distan ...