运算符
算术运算符
一元运算符
只需要一个数据就可以操作的运算符,例如:自增++、自减--、-负号
表达式:用运算符连接起来的式子,a+b,a>3
++表示某个值自身加1
--表示某个值自身减1
++和--可以写在变量之前,也可以写在变量之后,比如++a,a++
++前和++后的区别:
1、如果是自身的运算,结果上没什么区别
2、如果是混合运算,存在区别,++a表示先自增再输出,a++表示先输出再加加
int a=10;
int b=a++;
int c=--b;
int d=++c + b++
abcd的值:11, 10 10 19
二元运算符
二元运算符:需要两个数据才可以进行操作的运算符,比如:+ - * /
加法:
- 如果是两个数字相加,就是求和
- 如果是字符和数字相加,就是字符的ascii码与数字相加
- 如果是数字字符串和数字相加,就是字符串和数字拼接,不做运算
除法: / 整数相除除不尽,取整
求余:取余数
public static void main(String[] args){ // int a=10; a++; ++a; System.out.println(a); // System.out.println(a++);//10,先输出再加1 // System.out.println(a);//11 int a=10; int b=a++; int c=--b; int d=++c + b++; System.out.println(a);//11 System.out.println(b);//10 System.out.println(c);//10 System.out.println(d);//19 System.out.println(a+b);//21 System.out.println('a'+1);//98 System.out.println("10010"+10);//1001010 System.out.println(100/3);//33 System.out.println(100%3);//1 System.out.println(2.125/1.25);// 1.7浮点数相除,结果还是浮点数 } }
关系运算符
也可以称为比较运算符,关系运算符的结果是true和false
e.g:>= <= ==
public class Demo02 { public static void main(String[] args) { //比较运算符 //比较变量 int a = 10, b = 20; System.out.println(a > b ); //false System.out.println(b > a ); //true System.out.println(b >= a); //true //比较常量 System.out.println(a > 5); //true //和多个数值比较 //System.out.println(5 < a < 20); //不允许写在一起 System.out.println(a > 5 && a < 20); //== 判断数值是否相等 //直接比较基本类型 System.out.println(10 == 10); //true System.out.println(a == 10); //true System.out.println(a == b); //false System.out.println('a' == 97); //true //System.out.println("10" == a); //字符串不能和基本类型使用==比较 System.out.println(a % 2 == 0); //true } }
逻辑运算符(短路现象)
逻辑运算符是把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断结果为true或false
&& 逻辑与
|| 逻辑或
! 逻辑取反
& 短路与
| 短路或
public class Demo03 { public static void main(String[] args) { //逻辑运算符 //&& 将多个表达式连接起来,如果每个表达式的结果都为true,最终的结果才为true,有短路效果 int a = 10,b = 20; System.out.println(a > 5 && b > 10); //true System.out.println(a < 5 && b > 10); //false //& 将多个表达式连接起来,如果每个表达式的结果都为true,最终的结果才为true System.out.println(a > 5 & b > 10); //true System.out.println(a < 5 & b > 10); //false //短路效果,&&中,前面的表达式如果是false,后面的表达式就不会执行了 //a<5 是false,后面的表达式就不计算了,这里的b++没有执行 System.out.println( a < 5 && b++ > 10); System.out.println(b);//20 System.out.println( a < 5 & b++ > 10); System.out.println(b); //21 // || 逻辑或,如果表达式都为false,结果采为false,有一个为true,最终结果就为true System.out.println( a < 5 || b > 10); //true System.out.println( a < 5 | b > 10); //true // ||短路效果,前面表达式为true,后面表达式就不计算了 System.out.println(a > 5 || b++ < 10); System.out.println(b); //21 // ! 逻辑取反 ,值是true,取反后为false ,值是false,取反后为true System.out.println(!(a > 5)); //false System.out.println(!true); //false } }
位运算符(二进制运算)
& 位与运算符 ,连接两个数值进行运算,将数值转成二进制后,按位做运算,如果同时为1,结果为1,否则为0
100&20
0110 0100
0001 0100
0000 0100 》结果为4
| 位或运算符,连接两个数值进行运算,将数值转成二进制后,按位做运算,有一位为1,结果为1,否则为0
100|20
0110 0100
0001 0100
0111 0100 》结果为116
^位异或运算符,连接两个数值进行运算,将数值转成二进制后,按位做运算,位不同为1,位相同为0
100^20
0110 0100
0001 0100
0111 0000 》结果为112
~位取反运算符,只对一个数值进行运算,将数值转成2进制后,对补码进行运算,运算完之后再将补码变回原码
正数的源码、反码、补码都是一样的
~100
原码0110 0100
取反1001 1011
减1 1001 1010
符号位不变取反 1110 0101 ==> -101
~-100
原码1110 0100
反码1001 1011
补码(反码+1) 1001 1100
补码取反 0110 0011
位移运算符(二进制运算)
把数值转为二进制后往左还是往右运算
>> 右移位运算符(做除法)
<< 左位移运算符(做乘法)
package com.iweb.airui369.day02.operator; import java.util.HashMap; public class Demo04 { public static void main(String[] args) { System.out.println(100 & 20); System.out.println(100 | 20); System.out.println(100 ^ 20); System.out.println(~100); System.out.println(~-100); //99 int i = 200; // 1100 1000 int类型的是32位,前面都是0,符号位0表示正数,1表示负数 //200转为byte类型后,byte只有8位,1100 1000 只被保留8位,第一位就被当做符号位 //1100 1000 除符号位外,做取反 +1 //10110111 +1 = 10111000 ==>-56 System.out.println((byte)i); //-56 //位移运算 //0000 0010 往左移 4位 0010 0000 32 System.out.println(2 << 4); // 2 * 2^4 //右位移运算符 //0010 0000 往右移2位 ==> 0000 1000 8 System.out.println(32 >> 2); // 32 / 2^2 } }
赋值运算符
= , += , -= , *= ,/= ,%=
int a = 10; 将10 赋值给a这个变量
public class Demo05 { public static void main(String[] args) { //赋值运算符 //+= -= *= /= %= //a += 2; 表示 a = a + 2; int a = 10; a += 5; // a = a + 5; =左边的a,表示a这个变量名, =右边的a,表示找上面的a变量带入到这里 System.out.println(a); //15 a -= 5; // a = a - 5; System.out.println(a); // 10 a *= 5; // a = a * 5 System.out.println(a); // 50 a /= 5; //a = a/5; System.out.println(a); //10 a %= 3; //a = a%3; System.out.println(a);//1 } }
三元运算符(三目运算符):嵌套使用
语法:表达式?值1:值2;
如果表达式为true,结果为值1,如果是false为值2
public static void main(String[] args) { //用三元运算符找出abc中的最大值 int a=10; int b=20; int c=30; int max=(a>b?a:b)>c?(a>b?a:b):c; System.out.println(max); }
Scanner(键盘录入)
Scanner 是一个类,这个类系统写好了,使用时把这个类的包导入进来就可以使用了
1、导包:import java.util.Scanner;
2、创建Scanner类的对象:Scanner sc = new Scanner(System.in);
3、使用对象,调用方法: int a = scanner.nextInt();
package com.iweb.airui369.day02.operator; import java.util.Scanner; public class Demo07 { public static void main(String[] args) { //创建Scanner类的对象(变量) //语法 : 类型 变量名 = 值; Scanner scanner = new Scanner(System.in); System.out.println("请输入一个数字a:"); //使用对象scanner调用方法,并把输入的值赋值给变量 int a = scanner.nextInt(); System.out.println("请输入一个数字b:"); //使用对象scanner调用方法,并把输入的值赋值给变量 int b = scanner.nextInt(); System.out.println("输入的两个数字的和是:" + (a + b)); } }