Java中的运算符

目录

1算术运算符

 1.1 基本的四则运算

1.2 增量赋值运算符和自增自减运算符 

  2 关系运算符

 3 逻辑运算符

4位运算符

5.移位运算(了解即可)

6 条件运算符

7.小结


1算术运算符

 1.1 基本的四则运算

    + - * / %,这些都比较简单。值得注意的是除法。除法分为两种,一种是/  一种是%

int a = 1; 
int b = 2; 
System.out.println(a / b); 
// 结果为 0

  因为这些都属于int类型,int/int还是int,如果想要准确的值 需要double来计算。

   0不能作为除数,否则编译器会报错。

  Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)
  下面来介绍一下%运算符
System.out.println(11.5 % 2.0); 
// 运行结果
1.5

  表示取余,可以对int和double类型的数取余数。

1.2 增量赋值运算符和自增自减运算符 

int a = 10; 
a += 1; // 等价于 a = a + 1 
System.out.println(a);

  a+=1 等价于 a=a+1

int a = 10; 
int b = ++a; 
System.out.println(b); 
int c = a++; 
System.out.println(c);

  这里要分辨的前置++和后置++,前者是先++再使用,后者是先使用,再++

  2 关系运算符

  关系运算符主要有六种  == != < > <=  >=

int a = 10; 
int b = 20; 
System.out.println(a == b); 
System.out.println(a != b); 
System.out.println(a < b); 
System.out.println(a > b); 
System.out.println(a <= b); 
System.out.println(a >= b)

  注意,这些关系运算符的返回值都是Boolean类型。

 3 逻辑运算符

  逻辑运算符主要有三个 分别是逻辑与 &&  逻辑或||  逻辑非

  其中这些运算符的操作数与返回值都是boolean 

 逻辑与&&

int a = 10; 
int b = 20; 
int c = 30; 
System.out.println(a < b && b < c);

逻辑或||

int a = 10; 
int b = 20; 
int c = 30; 
System.out.println(a < b||b

 逻辑非 !

int a = 10; 
int b = 20; 
System.out.println(!a 

  这些都遵从短路求值,即在逻辑与中如果左侧表达式为false,贼整体一定为false,无需计算右侧表达式 。 在逻辑或中,如果左侧表达式为true,则整体一定为true,无需计算右侧表达式。

|和& 这两个也表示逻辑运算,但不支持短路求值,我们一般不推荐使用。

4位运算符

  主要有四种位运算符,他们操作的是二进制位。分别是 & |  ^  ~

   按位与 &(如果两个二进制都是1,则结果是1,否则就是0)

int a = 10; 
int b = 22; 
System.out.println(a & b);
//在计算的时候首先转化为二进制  分别是1010和10100
// 10=>01010  
// 20=>10110
// 则按位与以后为 00010

按位或| (如果两个二进制位都是0,则结果才为0,只要有一个1,则结果为1)

int a = 10; 
int b = 22; 
System.out.println(a | b);
//在计算的时候首先转化为二进制  分别是1010和10100
// 10=>01010  
// 20=>10110
// 则按位或以后为11110

按位取反 ~,就是把每个二进制位的数字都取相反的值就行。

按位异或 ^ 即找不同,有不一样的就取1 否则就取0.

int a = 10; 
int b = 22; 
System.out.println(a ^b);
//在计算的时候首先转化为二进制  分别是1010和10100
// 10=>01010  
// 20=>10110
// 则按位异或以后为 11100

5.移位运算(了解即可)

 移位运算有三个 << >> >>>

其中 左移 << 最左侧不要,右侧补0;数值就是移动后的值为 a*2^n

int a = 0x10; 
System.out.printf("%x\n", a << 1); 
// 运行结果(注意, 是按十六进制打印的) 
20

 右移 >> 右移分两种,一种是正数,很简单 。就最右侧不要了,最左侧补0.而负数,最右侧不要了,最左侧补1.

 int a = -5;
 int b= a>>1;
 b=-3;
 // 首先 将a转化为 二进制数 即 1101
 // 再取a的补码 即为 1011
 // 再右移一位 1101
 // 转化为原码  1011 
//此时 b=-3

无符号右移 >>>

 最右侧不要了,最左侧补0;

int a = 0xffffffff; 
System.out.printf("%x\n", a >>> 1); 
// 运行结果(注意, 是按十六进制打印的) 
7fffffff
注意:
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方。
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义。

6 条件运算符

  条件运算符只有一个 ,表达式1 ? 表达式2 : 表达式

当 表达式1 的值为 true , 整个表达式的值为 表达式2 的值; 表达式1 的值为 false , 整个表达式的值为 表达式 3 的值.  也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法。

// 求两个整数的最大值
int a = 10; 
int b = 20; 
int max = a >b?a:b;
此时 max=20

7.小结

1. % 操作再 Java 中也能针对 double 来计算 .
2. 需要区分清楚 前置自增 和 后置自增之间的区别 .
3. 由于 Java 是强类型语言 , 因此对于类型检查较严格 , 因此像 && 之类的运算操作数必须是 boolean.
4. 要区分清楚 & | 什么时候是表示按位运算 , 什么时候表示逻辑运算 .
整体来看 , Java 的运算符的基本规则和 C 语言基本一致

你可能感兴趣的:(java,开发语言,算法)