算术运算符:+,-,*,/,%
比较运算符: >, <, >=, <=, !=, ==
逻辑运算符:&& 短路与,|| 短路或,! 非,& 与,| 或
短路与非短路与的区别:&& 从左端开始,若第一个为false ,则不去判断第二个
而 & 则会判断两边
public class ArithmeticTest {
public static void main(String[] args) {
if(1>2 && (3/0)>3){
System.out.println("判断成功!");
}else{
System.out.println("判断失败!");
}
}
}
输出:判断失败!
public class ArithmeticTest {
public static void main(String[] args) {
if(1>2 & (3/0)>3){
System.out.println("判断成功!");
}else{
System.out.println("判断失败!");
}
}
}
输出:Exception in thread "main" java.lang.ArithmeticException: / by zero
at study.ArithmeticTest.main(ArithmeticTest.java:5)
位运算符:
public static void main(String[] args) {
/**
* 1.按位与 & 都为1则为1
* 2.按位或 | 同为0则为0
* 3.按位异或 ^ 不同为1,相同为0
* 4.按位取反 ~ 1则0,0则1
*/
byte i = 7 & 8;
System.out.println(i);
/**
* 取补码进行运算
* 7:
* 原码:00000111
* 反码:00000111
* 补码:00000111
* 8:
* 原码:00001000
* 反码:00001000
* 补码:00001000
* 同为1则为1,结果:00000000
* 结果为 0
*/
byte j = -7 & 8;
System.out.println(j);
/**
* 取补码进行运算
* -7:
* 原码:10000111
* 反码:11111000
* 补码:11111001 (负数反码+1为补码)
* 8:
* 原码:00001000
* 反码:00001000
* 补码:00001000
* 同为1则为1,00001000
* 结果为 8
*/
byte z = (byte) ~128;
/**
*原码:0...010000000(默认整数位int 类型,为32位 4个字节,一个字节占8位)
*反码:0...010000000
*补码: 0...010000000
*取反:1...101111111
*byte 取8位补码:01111111
* 补码-1 : 01111111
* 原码 :01111111
* 结果为:127
*/
System.out.println(z);
byte w = 1^-12;
/**
* 1的补码:00000001
* -12:
* 原码:10001100
* 反码:11110011
* 补码:11110100 (负数反码+1为补码)
* 按位异或:相同为0不同为1
* 结果:11110101
* 补码:11110100
* 反码:10001011
* 结果为:-11
*/
System.out.println(w);
}
移位运算符:
<< 左移 >> 右移动 >>> 无符号右移
public static void main(String[] args) {
/**
* 1向左移动2位
* 补码:00000001
* 移动后补码:00000100
* 结果:4
*/
byte b = 1<<2 ;
System.out.println(b);
/**
* -1向左移动2位
* 补码:1...1111111
* 移动后补码:1...1111100
* 原码:1...0000100
* 结果:-4
*/
int c = -1<<2 ;
System.out.println(c);
/**
* -1向右移动2位(>>>无符号右移,符号位也会移动,多出的补0)
* 补码:1...1111111
* 移动后补码:001...11111
* 原码:001...11111
* 结果:1073741823
*/
int dd = -1>>>2 ;
System.out.println(dd);
/**
* -5向右移动2位(>>右移,符号位不会移动
* )
* 补码:1...1111010
* 移动后补码:1111...11110(右移动空的部分补1)
* 原码:1..000010
* 结果:-2
*/
int cc = -5>>2 ;
System.out.println(cc);
三元运算符:
格式: 条件?值1:值2
如果条件为true 取值1,条件为false 取值2
比较运算符: >, <, >=, <=, !=, ==
逻辑运算符:&& 短路与,|| 短路或,! 非,& 与,| 或
短路与非短路与的区别:&& 从左端开始,若第一个为false ,则不去判断第二个
而 & 则会判断两边
public class ArithmeticTest {
public static void main(String[] args) {
if(1>2 && (3/0)>3){
System.out.println("判断成功!");
}else{
System.out.println("判断失败!");
}
}
}
输出:判断失败!
public class ArithmeticTest {
public static void main(String[] args) {
if(1>2 & (3/0)>3){
System.out.println("判断成功!");
}else{
System.out.println("判断失败!");
}
}
}
输出:Exception in thread "main" java.lang.ArithmeticException: / by zero
at study.ArithmeticTest.main(ArithmeticTest.java:5)
位运算符:
public static void main(String[] args) {
/**
* 1.按位与 & 都为1则为1
* 2.按位或 | 同为0则为0
* 3.按位异或 ^ 不同为1,相同为0
* 4.按位取反 ~ 1则0,0则1
*/
byte i = 7 & 8;
System.out.println(i);
/**
* 取补码进行运算
* 7:
* 原码:00000111
* 反码:00000111
* 补码:00000111
* 8:
* 原码:00001000
* 反码:00001000
* 补码:00001000
* 同为1则为1,结果:00000000
* 结果为 0
*/
byte j = -7 & 8;
System.out.println(j);
/**
* 取补码进行运算
* -7:
* 原码:10000111
* 反码:11111000
* 补码:11111001 (负数反码+1为补码)
* 8:
* 原码:00001000
* 反码:00001000
* 补码:00001000
* 同为1则为1,00001000
* 结果为 8
*/
byte z = (byte) ~128;
/**
*原码:0...010000000(默认整数位int 类型,为32位 4个字节,一个字节占8位)
*反码:0...010000000
*补码: 0...010000000
*取反:1...101111111
*byte 取8位补码:01111111
* 补码-1 : 01111111
* 原码 :01111111
* 结果为:127
*/
System.out.println(z);
byte w = 1^-12;
/**
* 1的补码:00000001
* -12:
* 原码:10001100
* 反码:11110011
* 补码:11110100 (负数反码+1为补码)
* 按位异或:相同为0不同为1
* 结果:11110101
* 补码:11110100
* 反码:10001011
* 结果为:-11
*/
System.out.println(w);
}
移位运算符:
<< 左移 >> 右移动 >>> 无符号右移
public static void main(String[] args) {
/**
* 1向左移动2位
* 补码:00000001
* 移动后补码:00000100
* 结果:4
*/
byte b = 1<<2 ;
System.out.println(b);
/**
* -1向左移动2位
* 补码:1...1111111
* 移动后补码:1...1111100
* 原码:1...0000100
* 结果:-4
*/
int c = -1<<2 ;
System.out.println(c);
/**
* -1向右移动2位(>>>无符号右移,符号位也会移动,多出的补0)
* 补码:1...1111111
* 移动后补码:001...11111
* 原码:001...11111
* 结果:1073741823
*/
int dd = -1>>>2 ;
System.out.println(dd);
/**
* -5向右移动2位(>>右移,符号位不会移动
* )
* 补码:1...1111010
* 移动后补码:1111...11110(右移动空的部分补1)
* 原码:1..000010
* 结果:-2
*/
int cc = -5>>2 ;
System.out.println(cc);
备注: int 类型的数据在位移时,首先将操作数对32进行取模,得到的结果才是真正的位移数
long 为64取模
三元运算符:
格式: 条件?值1:值2
如果条件为true 取值1,条件为false 取值2