1、本次的预计讲解的知识
1、运算概板;
2、逻辑运算符;
3、三目运算符;
4、位运算符。
2、具体内容
在之前使用过这样的语法:
int num = 10 ; |
此类的方式称为赋值运算符,“=”是实现赋值运算使用的。
那么进行数学计算时所使用的四则运算也属于运算符的定义范畴。
但是对于所有的运算符,千万要记住,不要编写过于复杂的操作。
范例:观察一种神奇的代码
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 20 ; int result = numA * 2 - --numB * numA++ + numB -numA-- + numB; System.out.println(result); } } |
以后可以写的代码,一定要写出来“1 + 1 = 2 ”的代码。如果真的是复杂的代码,建议使用“()”改变优先级。
在开发之中常用的几类运算符:四则运算、逻辑运算、三目运算、位运算。
对于四则运算基本组成就是:+、-、*、/、%
范例:四则运算
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 20 ; System.out.println("加法计算:" + (numA + numB)); System.out.println("减法计算:" + (numA - numB)); System.out.println("乘法计算:" + (numA * numB)); System.out.println("除法计算:" + (numA / (double)numB)); } } |
范例:求模计算
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 3 ; System.out.println("除法计算:" + (numA % numB)); } } |
例如:如果有这样一个需求,要求你判断的给定方法的数字是偶数还是奇数?偶数模2是0、奇数模2是1,可以用这样的结果来进行判断。
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 3 ; System.out.println("除法计算:" + (numA % 2)); System.out.println("除法计算:" + (numB % 2)); } } |
但是在运算符里面提供了一些简化运算符:*=、/=、-=、+=、%=。
public class TextDemo { public static void main(String[] args) { int num = 10 ; num *= 2 ;//等价:num = num * 2 System.out.println(num); } } |
还有一类运算符“++”(自增)、“--”(自减),它根据位置不同,执行的顺序也不同:
l ++变量、--变量:写在前面表示的是先进行变量内容的自增1或自减1之后再使用变量进行数学计算
l 变量++、变量--:先使用变量内容进行计算,而后在再实现增1或自减1操作
范例:观察自增(前面)
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 20 ; int result = ++numA + numB; //++写在前面,表示先对numA的变量内容加1 //使用处理后的numA变量的内容 + numB变量的内容 System.out.println("numA =" + numA); System.out.println(result);
} } |
范例:观察自增(后面)
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 20 ; int result = numA++ + numB; //++写在后面,表示先对numA的变量内容进行加法计算 //加法计算完成之后再numA的内容进行自增 System.out.println("numA =" + numA); System.out.println(result);
} } |
2.1三目运算
三目是一种的赋值运算的形式,执行三目的时候以一个布尔表达式的结果进行赋值,基本的语法结构语法如下:
数据类型 变量 = 布尔表达式 ? 满足此表达式时设置的内容 : 不满足此表达式时设置的内容 |
范例:实现赋值
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 20 ; int max = numA > numB ? numA : numB; //如果nmuA大于numB,返回true,则将numA的内容赋给max //如果nmuA小于numB,返回false,则将numB的内容赋给max System.out.println(max); } } |
如果此处不使用三目运算,则就需要编写如下形式的判断语句完成。
public class TextDemo { public static void main(String[] args) { int numA = 10 ; int numB = 20 ; int max = 0 ; if (numA > numB) { max = numA; } else { max = numB; } System.out.println(max); } } |
利用三目可以节约一些判断代码。
2.2逻辑运算
对于逻辑运算主要就是:与(&、&&)、或(|、||)、非(!)三种计算。
范例:非就是针对对于布尔结果进行求法
public class TextDemo { public static void main(String[] args) { boolean flag = true; System.out.println(!flag); } } |
如果现在是多个布尔表达式要想进行连接,只能使用与和或两个操作。
1、与操作:
当多个条件进行连接的时候,那么只有这多个条件都满足了,最终的结果才是true,如果有一个条件是false,结果就是false。
范例:观察普通与“&”
public class TextDemo { public static void main(String[] args) { if ((1 == 2) & (10 /0 == 0)) { System.out.println("Hello World"); } } } |
此时使用的是一个“&”,发现第一个判断返回false之后第二个判断(10 / 0 == 0)继续执行了,但是现在的问题是如果前面的条件已经返回了false,后面不过有多少个true,最终的结果还是false,完全没有必要进行后续的判断。
范例:使用短路与(&&)
public class TextDemo { public static void main(String[] args) { if ((1 == 2) && (10 /0 == 0)) { System.out.println("Hello World"); } } } |
此时没有出错,因为前面的条件返回了false,后面就自然不再需要判断了。
2、或操作
或要求所有的判断条件只要有一个满足即可。
范例:观察普通或(|)
public class TextDemo { public static void main(String[] args) { if ((1 == 1) | (10 /0 == 0)) { System.out.println("Hello World"); } } } |
使用普通或操作的时候所有的判断条件都进行了执行,但是货运算里面它的基本形式是:只要有一个判断返回了true,后面不管有多少个true或者是false,最终的结果永远都是true。
范例:观察短路或操作(||)
public class TextDemo { public static void main(String[] args) { if ((1 == 1) || (10 /0 == 0)) { System.out.println("Hello World"); } } } |
从此就使用短路与和短路或操作。
2.3、位运算(了解)
在之前所进行的数学计算都是用的是十进制数据,而Java本身的运算支持二进制、八进制、十六进制。下面观察二进制,如果将想十进制变为二进制的形式,采用的方式:除2取余、倒序。
25二级制就是11001
÷2
12……1
÷2
6……0
÷2
3……0
÷2
1……1
÷2
0……1
位运算是主要进行二进制数据操作的,可以使用:&、|、>>、<<、^、~。
范例:实现位与操作(乘)
public class TextDemo { public static void main(String[] args) { int numA = 9 ; int numB = 11; System.out.println(numA & numB); } } |
9的二进制:00000000 00000000 00000000 00001001
11的二级制:00000000 00000000 00000000 00001011
&的结果:00000000 00000000 00000000 000010019
范例:实现位或操作
public class TextDemo { public static void main(String[] args) { int numA = 9 ; int numB = 11; System.out.println(numA | numB); } } |
9的二进制:00000000 00000000 00000000 00001001
11的二级制:00000000 00000000 00000000 00001011
|的结果:00000000 00000000 00000000 0000101111
范例:移位操作(请用最快的方式计算2的3次方结果)
public class TextDemo { public static void main(String[] args) { int num = 2 ; int result = num << 2;//向左移位 System.out.println(num);//原始数据不改变 System.out.println(result);//2 * 2 * 2 } } |
2的二进制: 00000000 00000000 00000000 00000010
左移位之后:00000000 00000000 00000000 00001000 8
面试题:请解释“&”和“&&”的区别?“|”和“||”的区别
·逻辑运算:
|-与运算分别为普通与(&)短路和与(&&)
|-普通与:所有的条件都要判断;
|-短路与:如果前面的判断返回了false,后面不再判断。最终的结果就是false
|-或运算分为普通或(|)短路和或(||)
|-普通或:所有的条件都要判断;
|-短路或:如果前面的判断返回了true,后面不再判断。最终的结果就是true
·位运算:位与运算(&)、位或运算(|)。其中“&&”和“||”不能应用在位位运算 上。
3、总结
1、运算符写简单操作;
2、三目一定要掌握;
3、使用短路与和短路或。