Fork me on GitHub

Java-2 运算符

1.算数运算符加减乘除取余

  • java中+,-,*,/,%运算:
class MathDemo1{
	public static void main(String[] args){
		int a = 15;
		int b = 2;
		System.out.println(a+b);//17
		System.out.println(a-b);// 13
		System.out.println(a*b);// 30
		System.out.println(a/b);// 7
		System.out.println(a%b);// 1
		System.out.println(a/b*1.0);// 7.0
		System.out.println(1.0*a/b);// 7.5
		System.out.println((double)a/b);// 7.5
		System.out.println((double)(a/b));// 7.0
	}
}

2.前++和后++

  • 它只能和变量一起使用,在变量的前面叫前++,在变量后面叫后++。
  • 在单独使用的时候:
class MathDemo2{
	public static void main(String[] args){
		int a = 10;
		int b = 10;
		++a;
		b++;
		System.out.println(a);// 11
		System.out.println(b);// 11
	}
}
// 可以看到在单独使用时候没有区别
  • 参与运算:
int c = 10;
int d = 10;
int e = ++c;
int f = d++;
System.out.println(e);// 11
System.out.println(f);// 10
System.out.println(d);// 11

当参与运算时候,前++为先加1,再运算。后++ 先运算,后加1。

  • 练习
int a = 4;
int b = (a++) + (++a) + (a * 10)
		 4       6       60
      = 70

3.赋值运算

  • +=, -= , *=, /=, %=
class MathDemo3{
	public static void main(String[] args){
		int a = 15;
		int b = 2;
		System.out.println(a=b);//2
		
		a += b;
		System.out.println(a);// 4
		a -= b;
		System.out.println(a);// 2
		a *= b;
		System.out.println(a);// 4
		a /= b;
		System.out.println(a);// 2
		a %= b;
		System.out.println(a);// 0
        
        
        // 错误,不兼容类型,从int到short可能会有损失
        short s = 1;
        s = s + 1;
        
        // 正确,包含了一个强制类型转换,s = (short)(s+1)
        short s = 1;
        s+=1
	}
}

4.关系运算符

  • 关系运算符得到的是结果true或false
运算符 运算 例子 结果
== 相等 4==3 false
!= 不等于 4!=3 true
< 小于 4<3 false
> 大于 4>3 true
<= 小于等于 4<=3 false
>= 大于等于 4>=3 true
instanceof 是否是类的对象(只能用于引用数据类型) "hello" instanceof String true
  • demo
class MathDemo4{
	public static void main(String[] args){
		int a = 15;
		int b = 2;
		System.out.println(a=b);// 2
		System.out.println(a==b);// true
		System.out.println(a>b);// false
		System.out.println(a<b);// false
		System.out.println("abc" instanceof String);// true
	}
}

5.逻辑运算符

  • 用于连接布尔类型值(变量或是常量)
&   and    两边都是true才是true       true&trie = true;
|   or	   只要有一个为true,为true	  true&false = true;
^   xor     异或:相同为false,不同为true  true^false = true; true&true=false

  • demo
class MathDemo5{
	public static void main(String[] args){
		boolean a = true;
		boolean b = false;
		System.out.println(a&b);//false
		System.out.println(a|b);//true
		System.out.println(a^b);//true
		System.out.println(!(a&b));//true
	}
}
  • 优先级(从大到小):& ^ |

6.短路运算符

  • 短路运算符包括:&& ||
&&   两个都是true,结果才是true,如果前面为flase,后面不参与运算。&与&&得到结果都是一致的。
||   只要有一个为true,结果就是true,如果前面结果为true,后面不用计算了
  • demo
int x = 3; int y = 4;
System.out.println((x++>3) & (y++ > 4));//false
System.out.println(x); // 4
System.out.println(y); // 5


int x = 3; int y = 4;
System.out.println((x++>3) && (y++ > 4));//false
System.out.println(x); // 4
System.out.println(y); // 4

int x = 3; int y = 4;
System.out.println((++x>3) | (++y > 4));//true
System.out.println(x); // 4
System.out.println(y); // 5

int x = 3; int y = 4;
System.out.println((++x>3) | (++y > 4));//true
System.out.println(x); // 4
System.out.println(y); // 4

7.逻辑运算连接数字

  • & | ^ 连接正整数,需要把整数转成二进制的补码,逐位进行运算。把0当成false,把1当成true。
class MathDemo6{
	public static void main(String[] args) {
		System.out.println(15 & 2);// 2
		System.out.println(15 | 2);// 15
		System.out.println(15 ^ 2);// 13
		System.out.println(~2);// -3
	}
}
// int 占4个字节
15的补码  00000000 00000000 00000000 00001111
 2的补码  00000000 00000000 00000000 00000010
       & 00000000 00000000 00000000 00000010   按照都为1为1
       | 00000000 00000000 00000000 00001111   1个为1就为1
       ^ 00000000 00000000 00000000 00001101   不同为1
       ~ 11111111 11111111 11111111 11111101   取反:e.g.: 一个为1一个为0->0,取反1(补码)
         11111111 11111111 11111111 11111100   (反码, -1)
         00000000 00000000 00000000 00000011   (源码, 取反)

8.位运算符用法

  • 针对二进制位进行操作的运算符:
>> 右移:空位补最高位,
<< 左移:空位补零高位丢弃
>>> 无符号移动 空位补0
  • demo
class MathDemo7{
	public static void main(String[] args){
		System.out.println(7<<2);
		System.out.println(15>>2);
	}
}

7 << 2
7	00000000	00000000	00000000	00000111
<<2	00000000	00000000	00000000	00011100	28
15 >> 2
15	00000000	00000000	00000000	00001111
>>2	00000000	00000000	00000000	00000011	3
// 简单运算: 左移记为相当于乘以2的几次方。右移记为相当于除以2的几次方。

9.三目运算符用法

  • 三目表达式格式:
(关系表达式)? 表达式1: 表达式2;
// 如果条件为true,运算后结果示表达式1;
// 如果条件为false,运算后的结果表达式2;
// 表达式1和表达式2的最终结果是一个明确的值。
  • demo
class MathDemo8{
	public static void main(String[] args){
		int a = 15;
		int b = 23;
		int c = a>b?a:b;
		System.out.println(c);// 23
		String d = a>b?"a":"b";
		System.out.println(d);// b
	}
}
  • demo2
int a = 12;
int b = 44;
String c = a==b? "相等":"不相等";
System.out.println(c);//不相等
int d = 19;
boolean re = d%2==0? true:false;
System.out.println(re);//false
  • 获取两个long类型整数中的最大值,输出其结果
long a = 100;
long b = 20;
long max = a > b ? a : b;
System.out.println("最大值为:"+max);// 100
  • 获取三个float小数中最大值,输出其结果
float f1 = 32.5f;
float f2 = 2;
float f3 = 90.2f;

float f4 = f1 > f2 ? f1 : f2;
float max = f4 > f3 ? f4 : f3;
System.out.println("最大值为:"+ max);// 90.2

float max1 = f1>f2?f1>f3?f1:f3:f2>f3?f2:f3;
float max2 = f1>f2&f1>f3?f1:f2>f3?f2:f3;
System.out.println(max1);// 90.2
System.out.println(max2);// 90.2


// 分析
f1>f2?(f1>f3?f1:f3):(f2>f3?f2:f3)
f1>f2&f1>f3?f1:(f2>f3?f2:f3)
  • 三目运算符嵌套
int y = 56;
String str = (y<50)?"hai":(y>60)?"1987":"1988";
System.out.println(str);//1988
  • 计算分数:
// >= 90 A  80-89 B 70-79 C 60-69 D 60以下 E
int score = 88;
String level = (score>=90)?"A":(score>=80)?"B":(score>=70)?"C":(score>=60)?"D":"E";
System.out.println(level);// B
posted @ 2020-09-19 22:39  是阿凯啊  阅读(196)  评论(0编辑  收藏  举报