1.6.3 比较运算符
P.S. 1、比较运算符的结果都是boolean型,也就是要么是true,要么是false。 2、比较运算符“==”不能误写成“=” 。
示例1: - class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( 3 > 2 );
- System.out.println( 3 == 2 );
- }
- }
复制代码 运行结果:
1.6.4 逻辑运算符
逻辑运算符用于连接两个boolean类型的表达式。
"&"符号的运算特点:
true & true = true;
true & false = false;
false & true = false;
false & false = false;
"&"符号运算规律:
运算的两边只要有一个是false,结果肯定是false。
只有两边都为true,结果才是true。
示例1:
- class OperatorDemo
- {
- public static void main(String[] args){
- int x = 6;
- System.out.println( x > 2 & x < 5 );
- }
- }
复制代码 运行结果:
"|"符号的运算特点:
true | true = true;
true | false = true;
false | true = true;
false | false = false;
"|"符号运算规律:
运算的两边只要有一个是true,结果肯定是true。
只有两边都为false,结果是false。
示例2:
- class OperatorDemo
- {
- public static void main(String[] args){
- int x = 3;
- System.out.println( x > 2 | x < 5 );
- }
- }
复制代码 运行结果:
"^"符号的运算特点: true ^ true = false;
true ^ false = true;
false ^ true = true;
false ^ false = false;
"^"符号运算规律:
^符号的两边结果如果相同,结果是false。
两边的结果不同,结果是true。
示例3: - class OperatorDemo
- {
- public static void main(String[] args){
- int x = 3;
- System.out.println( x > 2 ^ x < 5 );
- }
- }
复制代码 运行结果:
"!"符号运算规律:
true = false
!false = true
!!true = true
示例4:
- class OperatorDemo
- {
- public static void main(String[] args){
- int x = 3;
- System.out.println( ! ( x > 2 ) );
- }
- }
复制代码 运行结果:
P.S.
&&:和&运算的结果是一样的,但是运算过程有点小区别。
&:无论左边的运算结果是什么,右边都参与运算。
&&:当左边为false时,右边不参加运算,这样可以提升效率。
||:和|运算的结果是一样的,但是运算过程有点小区别。
|:无论左边的运算结果是什么,右边都参与运算。
||:当左边为true时,右边不参加运算,这样可以提升效率。
使用&&和||比使用&和|更高效一些。
逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
1.6.5 位运算符
P.S. 位运算是直接对二进制位进行运算。
与运算例子:
6 & 3 = 2
110
& 011
-------
010
示例: - class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( 6 & 3 );
- }
- }
复制代码 运行结果:
P.S.
用“与运算”可以很方便提取某一二进制数的其中几位数。 或运算例子:
6 | 3 = 7
110
| 011
--------
111
示例: - class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( 6 | 3 );
- }
- }
复制代码 运行结果:
异或运算例子:
6 ^ 3 = 5
110
^ 011
-------
101
示例:
- class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( 6 ^ 3 );
- }
- }
复制代码 运行结果:
P.S.
一个数异或同一个数两次,结果还是这个数。
例子:
6 ^ 3 ^ 3 = 6
6 ^ 3 = 5
110
^ 011
-------
101
^ 011
-------
110
技巧:
利用异或运算可以实现对数据简单地进行加密,例如对一幅图片的所有数据异或3进行加密,那么这幅图片就无法查看了。解密只需要再对图片的数据执行异或3操作即可。
取反运算: 取反操作就是对二进制数值的每一位0变1,1变0。
示例: - class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( ~6 );
- }
- }
复制代码 运算结果:
左移运算例子:
3 << 2 = 12 相当于 3 * 2(2) = 12
00000000000000000000000000000011
00000000000000000000000000001100
3 << 3 = 24 相当于 3 * 2(3) = 24
00000000000000000000000000000011
00000000000000000000000000011000
示例:
- class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( 3 << 2 );
- System.out.println( 3 << 3 );
- }
- }
复制代码 运行结果:
总结:
左移几位其实就是该数据乘以2的几次方。
<<:可以完成2的次幂运算。
右移运算例子:
6 >> 1 = 3 相当于 6/2(1)=3
00000000000000000000000000000110
00000000000000000000000000000011
6 >> 2 = 1 相当于 6/2(2) = 1
00000000000000000000000000000110
00000000000000000000000000000001
示例:
- class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( 6 >> 1 );
- System.out.println( 6 >> 2 );
- }
- }
复制代码 运行结果:
总结:
右移几位其实就是该数据除以2的几次幂。
附:
以上例子中括号表示次幂的意思。
P.S.
>>:对于高位出现的空位,原来高位是什么,就用什么补这个空位。
>>>:无符号右移,数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
练习:
1. 最有效率的方式算出2乘以8等于几?
答案:
- class OperatorDemo
- {
- public static void main(String[] args){
- System.out.println( 2 << 3 );
- }
- }
复制代码 运行结果:
2. 对两个整数变量的值进行互换(可以使用第三方变量)。
答案:
- class OperatorDemo
- {
- public static void main(String[] args){
- int a = 3,b = 5;
- //开发时,使用第三方变量的形式,因为阅读性强。
- int c;
- System.out.println( "a = " + a + ",b = " + b );
- c = a;
- a = b;
- b = c;
- System.out.println( "a = " + a + ",b = " + b );
- }
- }
复制代码 运行结果:
3. 对两个整数变量的值进行互换(不可以使用第三方变量)。
答案1: - class OperatorDemo
- {
- public static void main(String[] args){
- int a = 3,b = 5;
- int c;
- System.out.println( "a = " + a + ",b = " + b );
- //这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会变化。
- a = a + b;
- b = a - b;
- a = a - b;
- System.out.println( "a = " + a + ",b = " + b );
- }
- }
复制代码 运行结果:
答案2: - class OperatorDemo
- {
- public static void main(String[] args){
- int a = 3,b = 5;
- int c;
- System.out.println( "a = " + a + ",b = " + b );
- a = a ^ b;
- b = a ^ b;
- a = a ^ b;
- System.out.println( "a = " + a + ",b = " + b );
- }
- }
复制代码 运行结果:
1.6.5 三元运算符
格式:
(条件表达式) ? 表达式1 : 表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2。
示例1: - class OperatorDemo
- {
- public static void main(String[] args){
- int x = 3,y;
- y = ( x > 1 ) ? 100 : 200;
- System.out.println( "y = " + y );
- }
- }
复制代码 运行结果:
示例2:获取两个整数中的较大的整数。 - class OperatorDemo
- {
- public static void main(String[] args){
- int a = 3,b = 5;
- int max = a > b ? a : b;
- System.out.println( max );
- }
- }
复制代码 运行结果:
示例3:获取三个整数中的较大的整数。
- class OperatorDemo
- {
- public static void main(String[] args){
- int o = 4,p = 5,q = 10;
- int temp = o > p ? o : p;
- int max = temp > q ? temp : q;
- System.out.println( max );
- }
- }
复制代码 运行结果: |