目录
扫描二维码关注公众号,回复:
14047298 查看本文章
一、前言
- 学习目标 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 |