算数运算符

算数运算符的注意事项
int num1 = 2;
int num2 =5;
int result1 = num2/num1;//3 整数之间做除法时,只保留整数部分而舍弃小数部分
System.out.println(result1);
//解决方法:先转成double类型,在运算
double result2 = (double) num2/num1;//2.5
double result3 = num2/((double)num1);//2.5
double result4 = num2/((num1 + 0.0));//2.5
double result5 = (double) (num2/num1); //2.0 先运算在转换类型结果就舍弃小数部分了
System.out.println(result4);//结果的符号与被模数的符号相同
//开发中,经常使用%来判断能否被除尽的情况。
int num1 = 5;
int num2 = 2;
System.out.println("num1 % num2=" + num1 % num2);//num1 % num2=1
int num3 = -5;
int num4 = 2;
System.out.println("num3 % num4=" + num3 % num4);//num3 % num4=-1
int num5 = 5;
int num6 = -2;
System.out.println("num5 % num6=" + num5 % num6);//num5 % num6=1
int num7 = -5;
int num8 = -2;
System.out.println("num7 % num8=" + num7 % num8);//num7 % num8=-1int num1 = 3;
int num2 = 4;
System.out.println("num1 + num2 ="+ num1 + num2);//num1 + num2 =34
System.out.println("num1 + num2 ="+ (num1 + num2));//num1 + num2 =7自增(++)、自减(--)
(前)++ :先自增1,后运算; (后)++ :先运算,后自增1
int a = 10;
int b = ++a;
int c = a++;
System.out.println("a="+a+",b="+b+",c="+c);//a=12,b=11,c=11(前)-- :先自减1,后运算;(后)-- :先运算,后自减1
int a1 = 10;
int b1= --a1;
int c1 = a1--;
System.out.println("a1="+a1+",b1="+b1+",c1="+c1);//a1=8,b1=9,c1=9注意点:自增1不会改变本身变量的数据类型
short s = 10;
//s = s + 1;//不兼容的类型: 从int转换到short可能会有损失
s = (short)(s + 1);//s=11
s++;//s=12
System.out.println(s);赋值运算符
赋值运算符_"="(单个赋值)
int i1 = 10;
int i2 = 10;赋值运算符_"="(连续赋值)
int j1,j2;
j1=j2=10;
int j3 = 10,j4 = 10;赋值运算符_"+=, -=, *=, /=, %="
int i = 10;
i += 2;//相当于i = i+2
i %= 2;//相当于i = i%2
System.out.println(i);Test:开发中,如果希望变量实现+1操作的几种方式
int j = 10;
j = j + 1;//方式一
j += 1;//方式二
j++;//方式三(推荐)比较运算符

结论:1.比较运算符的结果都是boolean型,也就是要么是true,要么是false。
2.比较运算符“==”不能误写成“=” 。
int a = 10;
int b = 20;
System.out.println(a == b);//false
System.out.println(a = b);//a=20逻辑运算符

& 与 &&
相同点:1. & 与 && 的运算结果相同
2. 当符号左边是true时,二者都会执行符号右边的运算
不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
开发中,推荐使用&&
boolean b = false;
int num = 10;
if (b & num++ > 0){//符号左边是false时,&继续执行符号右边的运算,num+1
System.out.println("上班");
}else{
System.out.println("下班");
}
System.out.println("num=" + num);//num=11
if (b && num++ > 0){ //符号左边是false时,&&不在执行符号右边的运算,num不变
System.out.println("上班");
}else{
System.out.println("下班");
}
System.out.println("num=" + num);//num=11| 与 ||
相同点:1. | 与 || 的运算结果相同
2. 当符号左边是false时,二者都会执行符号右边的运算
不同点:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算
开发中,推荐使用||
boolean b = true;
int num = 10;
if (b | num++ >0){//符号左边是true时,|继续执行符号右边的运算 故num+1
System.out.println("上班");
}else {
System.out.println("下班");
}
System.out.println("num=" + num);//num=11
if (b || num++ >0){//符号左边是true时,||不再执行符号右边的运算 故num不变
System.out.println("上班");
}else {
System.out.println("下班");
}
System.out.println("num=" + num);//num=11!(逻辑取反运算)
boolean b = true;
int num = 10;
System.out.println(!(num>0));//false
System.out.println(!b);//false^(逻辑异或运算)——二边相同为false,二边不同为true
boolean b1 = true;
boolean b2 = false;
int num = 10;
System.out.println(b1^(num > 0));//false(两边都为true)
System.out.println(b1^(num < 0));//ture(前边true,后边false)
System.out.println(b2^(num > 0));//ture(前边false,后边true)
System.out.println(b2^(num < 0));//false(两边都为false)说明:逻辑运算符操作的都是boolean类型的变量
三元运算符
概述
1.结构:(条件表达式)? 表达式1 : 表达式2
2. 说明
① 条件表达式的结果为boolean类型
② 根据条件表达式真或假,决定执行表达式1,还是表达式2.
如果表达式为true,则执行表达式1。
如果表达式为false,则执行表达式2。
③ 表达式1 和表达式2要求是一致的。
int a = 10;
int b = 20;
int num = (a > b)? 10 : 20;
double num1 = (a > b)? 10 : 20.0;
String str = (a > b)? "ii" : "jj";
//int num2 = (a > b)? 10 : "ss";//条件表达式中的类型错误
System.out.println(str);④ 三元运算符可以嵌套使用
int a = 10;
int b = 10;
String s = (a > b) ? "a大" : ((a < b) ? "b大" : "a和b相等");
System.out.println(s);3. 凡是可以使用三元运算符的地方,都可以改写为if-else反之,不成立。
4.如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。原因:简洁、执行效率高。
Test_获取三个数中的最大值
int a = 10;
int b = 20;
int c = -20;
//方式一:
int max1 = (a > b) ? a : b;
int max2 = (max1 > c) ? max1 : c;
System.out.println(max2);
//方式二:(不建议使用)
int max3 = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c;
System.out.println(max3);
//方式三:
if (a >b && a > c){
System.out.println(a);
}else if(a > b && a < c){
System.out.println(c);
}else{
System.out.println(b);
}位运算符

位运算符移动的细节

结论
1. 位运算符操作的都是整型的数据
2. << :在一定范围内,每向左移1位,相当于 * 2
>> :在一定范围内,每向右移1位,相当于 / 2
int a = 21;
System.out.println("a << 2 =" + (a << 2));//84(相当于21*2*2)
System.out.println("a << 27 =" + (a << 27));//-1610612736(到一定范围会将符号位变为1,改变其为负数)
System.out.println(a);//a=21
System.out.println("a >> 2=" + (a >> 2));//5(相当于21/(2*2))

4. &_与运算
System.out.println("12 & 5=" + (12 & 5));
5. |_或运算
System.out.println("12 | 5=" + (12 | 5));
6. ^_异或运算
异或运算有一个结论: 若m^n,则m=(m^n)^n,n=(m^n)^m

Test_交换两个变量的值
int a= 10;
int b= 20;
//方式一:定义临时变量的方式(推荐)
int temp = a;
a = b;
b = temp;
System.out.println("a=" + a + ",b=" + b);
//方式二:好处:不用定义临时变量。弊端:① 相加操作可能超出存储范围 ② 有局限性:只能适用于数值类型
a = a + b;
b = a - b;
a = a - b;
System.out.println("a=" + a + ",b=" + b);
//方式三:使用位运算符,有局限性:只能适用于数值类型
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a=" + a + ",b=" + b);7. ~_取反运算
System.out.println("~6 =" + (~6));
运算符的优先级

说明:本篇文章部分内容和图片引用尚硅谷官网内容,特此说明。@尚硅谷官网地址