运算符
- 1、算数运算符
- 2、比较运算符(条件运算符
- 3、逻辑运算符
- 4、赋值运算符
- 5、3元运算符
- 6、位运算符(了解)
1、算数运算符
+、-、、/、%、++、–
说明:
1.同类型数据参与运算,返回同类型的结果
2.如果类型不同,需要类型转换
3.byte、short、char参与运算,会先转成int再计算
4.运算的时候,Java不会检查溢出,需要注意
5.运算的时候,要保证类型一致
6.如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结 果不一定总是整数。
7.对于除号“/”,它的整数除和小数除是区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如: int x=3510;x=x/10001000; x的结果是?
8.“+”除了作为正号、加法运算符之外,它还可以作为连接符
9.++、–可以放在变量的前面,也可以放在变量的后面,但是在前在后是不一样的
在前,先赋值(算++,–,将值给表达式),后参与其他运算
在后,先参与其它运算,后赋值
package com.xms.basic.day01;
//算术运算符
public class Demo07 {
public static void main(String[] args) {
int a = 5;
int b = 2;
// /(取整,商)
System.out.println(a/b);
// %(取模,余数)
System.out.println(a%b);
//除数和被除数都是整数或者都是负数的时候结果为正数,否者结果为负数
System.out.println(5/2);//1
System.out.println(-5/2);//-1
System.out.println(5/-2);//1
System.out.println(-5/-2);//-1
//被模数如果有负数,结果就为负数
System.out.println(5%2);//1
System.out.println(-5%2);//-1
System.out.println(5%-2);//1
System.out.println(-5%-2);//-1
System.out.println(1%3);//1
System.out.println(2%3);//2
System.out.println(3%3);//0
System.out.println(4%3);//1
System.out.println(5%3);//2
System.out.println(6%3);//0
System.out.println("--------------------------------------");
/*
* ++(自增+1) --(自减-1)
* 1)++可以放在变量的前面,也可以放在后面
* 2)如果++单独出现,在前或在后无所谓
* 3)如果++参与了其他操作
* 在前,先执行++操作,后执行其他操作
* 在后,先执行其他操作,后执行++操作
*/
int i = 10;
i++;
System.out.println(i);
++i;
System.out.println(i);
int j = 10;
System.out.println(++j);//11
System.out.println(j);//11
j = 10;
System.out.println(j++);//10
System.out.println(j);//11
System.out.println("-------------------------------------");
int k = 10;
int l = ++k + 2;
System.out.println(k);//11
System.out.println(l);//12
k = 10;
l = k++ + 2;
System.out.println(k);//11
System.out.println(l);//12
System.out.println("-------------------------------------");
int m = 10;
m = m++;//=优先级最低(当=执行完后,表达式就不应该执行其他操作)
// int temp = m;
// m = m+1;
// m = temp;
System.out.println(m);
m = 10;
m = ++m;
System.out.println(m);
System.out.println("-------------------------------------");
int x = 5;
int y = x++ + ++x - --x - x++ + --x + x-- + ++x - x-- + x--;
// 5 + 7 - 6 - 6 + 6 + 6 + 6 - 6 + 5
System.out.println(x);
System.out.println(y);
}
}
package com.xms.basic.day02;
/*
* +的用法
* 1)正号
* 2)加号
* 3)连接符
* 当+边上存在字符串的时候,+用作连接符,链接操作后,会生成新的字符串
*/
public class OperatorDemo01 {
public static void main(String[] args) {
System.out.println("hello"+100);//"hello100"
System.out.println('a'+1+"2");//"982"
System.out.println('1'+2+3);//54
System.out.println("1"+2+3);//"123"
System.out.println(1+"2"+'3');//"123"
}
}
2、比较运算符(条件运算符
、>=、<、<=、==、!= instanceof
说明:
结果只能为boolean
< >= <= :只能使用在数值类型的数据之间。
== 和 !=: 不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间。
package com.xms.basic.day02;
/*
* 2、比较运算符(条件运算符
* >、>=、<、<=、==、!= instanceof
* 说明:
* 结果只能为boolean
* > < >= <= :只能使用在数值类型的数据之间。
* == 和 !=: 不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间。
*/
public class OperatorDemo02 {
public static void main(String[] args) {
System.out.println(10>5);//
System.out.println(10>=5);//
System.out.println(10<5);//
System.out.println(10<=5);//
System.out.println(10<=10);//
System.out.println(10<=10);//
System.out.println(10==5);//
System.out.println(10!=5);//
// true
// true
// false
// false
// true
// true
// false
// true
}
}
3、逻辑运算符
1非短路运算符
&:所条件都成立,结果才为true;只要1个条件不成立,结果就为false
|:只要1个条件成立,结果就为true;所的条件都不成立,结果才为false
2短路运算符
&&:如果前面的条件为false,后面的操作不需要执行
||:如果前面的条件为true,后面的操作不需要执行
3非运算
!(非true即false,非false即true
4异或
^:相同为false,相异为true
package com.xms.basic.day02;
/*
*3、逻辑运算符
*1非短路运算符
* &:所条件都成立,结果才为true;只要1个条件不成立,结果就为false
* |:只要1个条件成立,结果就为true;所的条件都不成立,结果才为false
*2短路运算符
* &&:如果前面的条件为false,后面的操作不需要执行
* ||:如果前面的条件为true,后面的操作不需要执行
*3非运算
*!(非true即false,非false即true
*4异或
*^:相同为false,相异为true
*&和
*/
package com.xms.basic.day02;
/*
*3、逻辑运算符
*1非短路运算符
* &:所条件都成立,结果才为true;只要1个条件不成立,结果就为false
* |:只要1个条件成立,结果就为true;所的条件都不成立,结果才为false
*2短路运算符
* &&:如果前面的条件为false,后面的操作不需要执行
* ||:如果前面的条件为true,后面的操作不需要执行
*3非运算
*!(非true即false,非false即true
*4异或
*^:相同为false,相异为true
*&和
*/
public class OperatorDemo03 {
public static void main(String[] args) {
//单与
System.out.println(10>5&10==10);//t
System.out.println(10<5&10==10);//f
//双与
System.out.println(10>5&&10==10);//t
System.out.println(10<5&&10==10);//f
//单或
System.out.println(10>5|10==10);//t
System.out.println(10<5|10==10);//t
//双或
System.out.println(10>5||10==10);//t
System.out.println(10<5||10==10);//t
//非
System.out.println(!true);//f
System.out.println(!(10!=10));//t
//异或,相异为真
System.out.println(10>5^10==10);//f
System.out.println(10<5^10!=10);//f
System.out.println(10>5^10!=10);//t
System.out.println(10<5^10==10);//t
}
}
4、赋值运算符
单赋值= 复合赋值+=、-=、*=、/=、%=
说明:
运算的结果不会改变变量本身的数据类型
开发中,如果希望变量实现+2的操作,几种方法?
方式一:num = num + 2;方式二:num += 2; (推荐)
开发中,如果希望变量实现+1的操作,几种方法?
方式一:num = num + 1;方式二:num += 1; 方式:num++; (推荐)
package com.xms.basic.day02;
/*
4、赋值运算符
单赋值= 复合赋值+=、-=、*=、/=、%=
说明:
运算的结果不会改变变量本身的数据类型
开发中,如果希望变量实现+2的操作,几种方法?
方式一:num = num + 2;方式二:num += 2; (推荐)
开发中,如果希望变量实现+1的操作,几种方法?
方式一:num = num + 1;方式二:num += 1; 方式:num++; (推荐)
*/
public class OperatorDemo04 {
public static void main(String[] args) {
//将1赋值给变量a
int a = 1;
a += 5;//相当于a = a + 5;//6
a -= 3;//-2
a *= 4;//12
a /= 2;//6
a %= 3;//0
System.out.println("a = "+ a);
short sh = 3;
sh += 2;//复合赋值运算隐含了强制类型转换,如果需要的话
System.out.println(sh);//5
short sh2 = 3;
sh2 += 2;
System.out.println(sh);//5
}
}
5、3元运算符
说明:
表达式1和表达式2要是同类型
3元运算符可以嵌套使用
凡是使用3元运算符的地方,都可以改写为if-else;反之,不成立。
如果程序既可以使用3元运算符,又可以使用if-else,优先择3元运算符。原因:简洁、执行效率高。
package com.xms.basic.day02;
import java.util.Scanner;
/*
5、3元运算符
说明:
表达式1和表达式2要是同类型
3元运算符可以嵌套使用
凡是使用3元运算符的地方,都可以改写为if-else;反之,不成立。
如果程序既可以使用3元运算符,又可以使用if-else,优先择3元运算符。原因:简洁、执行效率高。
*/
public class OperatorDemo05 {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = a>b? a+1:b+1;
System.out.println(c);
System.out.println("------------------------------");
//录入三个整数,输出其中的最大值
Scanner sc = new Scanner(System.in);
System.out.println("请输入三个整数!");
int n1 = sc.nextInt();
int n2 = sc.nextInt();
int n3 = sc.nextInt();
//获取n1和n2中的最大值temp
int temp = n1>n2?n1:n2;
//temp和n3进行比较
int max = temp>n3?temp:n3;
System.out.println(max);
max = n1>n2?(n1>n3?n1:n3):(n2>n3?n2:n3);
System.out.println(max);
}
}
6、位运算符(了解)
前提:需要将数转成对应2进制数
<<左移:向左边移动指定的距离
符号右移:如果最高位是1,前面补1;如果最高位是0,前面补0
无符号右移:前面都是补0
&位与:每一位都需要进行&运算,两个都为1,结果才为1
|位或:每一位都需要进行|运算,只要1个为1,结果就为1
^异或:只一个为0,一个为1,结果才是1
~取反:位取反