运算符

算术运算符

取余 自加 自减
+ - * / % ++ --
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 按位与
按位异或
按位或
逻辑运算符 &&
||
三目运算符 ?:
赋值运算符 含扩展赋值

最新文章

  1. [20141124]sql server密码过期,通过SSMS修改策略报错
  2. GPRS/3G
  3. iOS学习17之OC内存管理
  4. iOS 后台退出app时不执行applicationWillTerminate的临时解决方法
  5. python UTC,时间戳,字符串转换
  6. C# 类构造函数赋值里属性与字段赋值注意项
  7. python内存管理
  8. SqlServer表属性查询
  9. HttpClient工具类
  10. Flex下拉框
  11. Topshelf 一个简化Windows服务开发的宿主服务框架
  12. Java应用程序使用系统托盘资源
  13. reactive stream: 响应式编程
  14. Windows Server 2012安装IIS 8.0
  15. python 识别图片上的数字
  16. undefined symbol
  17. rpcbind.service启动失败
  18. spring boot 启动报错(spring-boot-devtools热部署后):The elements [spring.resources.cache-period] were left unbound. Update your application&#39;s configuration
  19. 大家一起做训练 第一场 B Tournament
  20. 构建openssl debug版

热门文章

  1. python获取响应某个字段值的三种方法
  2. CodeForces 1025G Company Acquisitions
  3. Luogu P3846 [TJOI2007] 可爱的质数/【模板】BSGS
  4. STM32入门系列-启动文件介绍
  5. 【SpringCloud】02.微服务与SpringCloud
  6. nginx vhost配置
  7. 深入浅出 webpack 之基础配置篇
  8. Spider--动态网页抓取--审查元素
  9. ASCII、Unicode、UTF-8、UTF-8(without BOM)、UTF-16、UTF-32傻傻分不清
  10. Java字符类型(详解)