Java运算符与表达式(下)
一、前言
- 学习目标 1:熟悉基本的逻辑运算符、三元运算符计算
- 学习目标 2:对于位运算与、或、非、同或、异或、移位运算会熟练应用,位运算在很多面试题会出现,最后优先级的表格要了解一下
二、逻辑运算符
- 定义:用于对逻辑数据进行运算,即与、或、非。
1.与
public static void main(String[] args) { int i,j,k;//与运算 i=10; j=20; k=30; //有false则false System.out.println((i>j)&&(i>k));//false&&false false System.out.println((i>j)&&(i<k));//false&&true false System.out.println((i<j)&&(i>k));//true&&false false System.out.println((i<j)&&(i<k));//true&&true true }
- 假如前一个为false,后一个不执行,直接输出false
2.或
public static void main(String[] args) { int i,j,k;//或运算 i=10; j=20; k=30; //有true则true System.out.println((i>j)||(i>k));//false||false false System.out.println((i>j)||(i<k));//false||true true System.out.println((i<j)||(i>k));//true||false true System.out.println((i<j)||(i<k));//true||true true }
- 假如前一个为true,后一个不执行,直接输出true
3.非
public static void main(String[] args) { int i,j,k;//非运算 i=10; j=20; k=30; System.out.println((i>j));//false System.out.println(!(i>j));//true System.out.println(!!(i>j));//false }
总结:
符号 | 介绍 | 说明 |
&& | 与 | true&&true=true |
|| | 或 | true||false=true |
! | 非 | 取反操作,!false=true !true=false |
三、三元运算符
- 格式:条件表达式 ? 值1 : 值2
- 执行流程:首先计算表达式的值,如果值为true,返回值1,如果为false,返回值2
例题 :
- 给定a,b的值,求出当中的最大值,赋给max
public static void main(String[] args) { int a,b,max;//初始化数据变量 a=20;//赋值 b=10;//赋值 max=a>b?a:b;//max等于a b两者中间较大的一个 System.out.println(max);//输出结果 } //输出20
四、基本位运算
1.与
- 符号:&
- 运算规则:两个二进制位都为1时才为1,否则为0
- 示例:1001&1111=1001
2.或
- 符号:|
- 运算规则:两个二进制位都为0时才为0,否则为1
- 示例:1001&1100=1101
3.非
- 符号:~
- 运算规则:首位符号位不变,0变成1,1变成0,在最后一位+1
- 示例:~1001 = 0110
4.同或
- 符号:~
- 运算规则:数字相同时为1,相反为0
- 示例:1001~1100=1010
5.异或
- 符号:^
- 运算规则:两个二进制位相反为1,相同为0
- 示例:1001^0111=1110
五、移位运算
1.左移
- 符号:<<
- 运算规则:符号位不变,低位补0
示例:
a<<b 代表十进制数字a向左移动b个进位 /* 左移: * 左移1位,相当于原数值 * 2 * 左移2位,相当于原数值 * 4 * 左移n位,相当于原数值 * 2^n */ 计算 10 << 1 10的补码:0000 1010 ----------------------- 结果补码:0001 0100 ==> 正数,即 10*2=20 计算 10 << 2 10的补码:0000 1010 ----------------------- 结果补码:0010 1000 ==> 正数,即 10*2^2=40 计算 10 << 3 10的补码:0000 1010 ----------------------- 结果补码:0101 0000 ==> 正数,即 10*2^3=80 计算 12 << 1 12的补码:0000 1100 ----------------------- 结果补码:0001 1000 ==> 正数,即 12*2=24
2.右移
- 符号:>>
- 运算规则:低位溢出,符号位不变,并用符号位补溢出的高位
示例:
a>>b 代表十进制数字a向右移动b个进位 /* 右移: * 右移1位,相当于原数值 / 2 * 右移2位,相当于原数值 / 4 * 右移3位,相当于原数值 / 2^n * 结果没有小数(向下取整) */ 计算 80 >> 1 80的补码:0101 0000 ----------------------- 结果补码:0010 1000 ==> 正数,即 80/2=40 计算 80 >> 2 80的补码:0101 0000 ----------------------- 结果补码:0001 01000 ==> 正数,即 80/2^2=20 计算 80 >> 3 80的补码:0101 0000 ----------------------- 结果补码:0000 1010 ==> 正数,即 80/2^3=10 计算 24 >> 1 12的补码:0001 1000 ----------------------- 结果补码:0000 1100 ==> 正数,即 24/2=12
六、优先级
运算符 | 描述 | 优先级 |
[]、() | 数组、括号 | 1 |
++ -- ! ~ | 自增、自减 | 2 |
* / % | 乘除、取余 | 3 |
+ - | 加、减 | 4 |
<< 、 >> 、>>> | 移位运算 | 5 |
< 、<=、 > 、>= | 关系运算 | 6 |
==、 != | 关系运算 | 7 |
& | 位与 | 8 |
^ | 异或 | 9 |
| | 位或 | 10 |
&& | 逻辑与 | 11 |
|| | 逻辑或 | 12 |
?: | 三元运算符 | 13 |
= 、*=、 /=、 +=、 -=、 ^= | 赋值运算 | 14 |
&=、 |=、 <<=、 >>= 、>>>= | 赋值运算 | 15 |