运算符

算术运算符

取余 自加 自减
+ - * / % ++ --
public class 算术运算符 {
public static void main(String[] args) {
int 被除数, 除数, 商, 余数;
被除数 = 10;
除数 = 3;
商 = 被除数 / 除数;
余数 = 被除数 % 除数;
System.out.println("商:" + 商 + " 余数:" + 余数);
}
}

浮点数也能取余,把上述代码的int改为double:

商:3.3333333333333335 余数:1.0

另外,浮点数可以除以0:

商:Infinity 余数:NaN

比较运算符

> < >= <= == !=

位运算符

用于操作整数类型(char也算入)

按位与 按位或 按位异或 补码取反 左移 右移 无符号右移
& | ^ ~ << >> >>>

关于补码取反,参见:

位运算法则:

p q p&q(同1为1) p|q(有1则1) p^q(同0异1)
1 0 0 1 1
0 1 0 1 1
1 1 1 1 0
0 0 0 0 0

重点掌握:

  • >> 右移(除以2^n)
  • << 左移(乘以2^n)
public class 左移右移 {
public static void main(String[] args) {
int a;
a = 512;
System.out.println(a << 1);
System.out.println(a >> 1);
System.out.println(a >>> 1);
a = -512;
System.out.println(a << 1);
System.out.println(a >> 1);
System.out.println(a >>> 1);
}
}

​ 对于int a=3,扩大8倍最快的方法是a<<3,即左移3位,相当于乘以23,计算机做位移的操作要被乘除快得多,比加法都快。

扩大2倍 a<<1 缩小2倍 a>>1
扩大4倍 a<<2 缩小4倍 a>>2
扩大8倍 a<<3 缩小8倍 a>>3
扩大16倍 a<<4 缩小16倍 a>>4

逻辑运算符

用于操作bool类型

运算符 说明
&& AND,同真为真
|| OR,一荣俱荣
NOT

短路逻辑运算

以&&为例:

  • 两个操作数都为true时,结果才为true;
  • 第一个为false时,结果就必为false,这时不会再判断第二个操作
public class 短路逻辑运算 {
public static void main(String[] args) {
int a = 1;
if ((a < 0) && (a++ < 1)) {
// Do Nothing
}
System.out.println(a);
}
}

“短路逻辑运算”针对布尔类型数据,而位运算符针对整型数据。

运算符 说明
& 不短路与
| 不短路或

赋值运算符

等号运算符(=)左侧只能是变量;右侧不一定。

连续赋值:a = b = 3;降低可读性,不推荐使用。

扩展的赋值运算符:(x+=2相当于x=x+2)

+= -= *= /= %=
&= |= ^= <<= >>= >>>=

推荐使用扩展的赋值运算符:①代码更简洁②效率较高

public class 赋值运算符 {
public static void main(String[] args) {
byte a = 1;
// 2是int,a+2自动提升为int类型
// 再赋值给a,需要显式转换一下
a = (byte) (a + 2);
System.out.println(a);
a = 1;
a += 2;
System.out.println(a);
}
}

运算符优先级

括号 ( )
单目运算符 自加、自减、~、!
算术运算符 */%
加减(+-)
位运算符1 位移(>>、<<、>>>)
比较运算符 大于小于
等于·不等于
位运算符2 按位与
按位异或
按位或
逻辑运算符 &&
||
三目运算符 ?:
赋值运算符 含扩展赋值

Java基础教程——运算符的更多相关文章

  1. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  2. Java基础-比较运算符Compare Operators

    Java基础-比较运算符Compare Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关系运算符 关系运算符包括: 1>.大于(>) 2> ...

  3. Java基础-算术运算符(Arithmetic Operators)

    Java基础-算术运算符(Arithmetic Operators) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java程序通过运算符实现对数据的处理,Java中的运算符包括: ...

  4. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  5. Java基础-位运算符Bitwise Operators

    Java基础-位运算符Bitwise Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.位运算特点 位运算符分为按位与(&),按位或(|),按位异或(^ ...

  6. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  7. Java基础教程:网络编程

    Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...

  8. Java基础教程(5)--变量

    一.变量 1.变量的定义   正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...

  9. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

随机推荐

  1. A. Arena of Greed 解析(思維)

    Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...

  2. 重要,知识点:InnoDB的插入缓冲

    世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. InnoDB引擎有几个重点特性,为其带来了更好的性能和可靠性: 插入缓冲(Insert Buffer) 两次写(Do ...

  3. 【译】Rust中的array、vector和slice

    原文链接:https://hashrust.com/blog/arrays-vectors-and-slices-in-rust/ 原文标题:Arrays, vectors and slices in ...

  4. python机器学习识别手写数字

    手写数字识别 关注公众号"轻松学编程"了解更多. 导包 import numpy as np import matplotlib.pyplot as plt %matplotlib ...

  5. [Luogu P4777] 【模板】扩展中国剩余定理(EXCRT) (扩展中国剩余定理)

    题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数, ...

  6. Miller-Rabin 素数检验算法

    算法简介 Miller-Rabin算法,这是一个很高效的判断质数的方法,可以在用\(O(logn)\) 的复杂度快速判断一个数是否是质数.它运用了费马小定理和二次探测定理这两个筛质数效率极高的方法. ...

  7. Flink的sink实战之一:初探

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. [开源] .Net 使用 ORM 访问 华为GaussDB数据库

    前言 华为GaussDB是一个企业级AI-Native分布式数据库.GaussDB采用MPP(Massive Parallel Processing)架构,支持行存储与列存储,提供PB(Petabyt ...

  9. c++11-17 模板核心知识(一)—— 函数模板

    1.1 定义函数模板 1.2 使用函数模板 1.3 两阶段翻译 Two-Phase Translation 1.3.1 模板的编译和链接问题 1.4 多模板参数 1.4.1 引入额外模板参数作为返回值 ...

  10. C# OpenFileDialog和SaveFileDialog的常见用法

    #region 示例1 SaveFileDialog sfd = new SaveFileDialog(); //设置文件类型 sfd.Filter = "备份文件(*.bak)|*.bak ...