运算符
运算符
1、算术运算符
+: +号在涉及到String
// 如 "" + 1 + 2 ,这里的+号会变成字符串连接符
System.out.println(""+1+2); //输出12
System.out.println(1+2+""); //输出3
/:除法在运算时需要注意小数,需要强制转换
int a = 20;
int b = 10;
System.out.println(b/a); //值为0
System.out.println(b/(double)a); //值为0.5
%: 取余数,模运算
int a = 10%3; //a = 1
++: 自增,--: 自减
int a = 1;
int b,c ;
b = ++a; //a先+1,然后赋值 a=2,b=2
c = a++; //a先赋值给c,然后a再+1 a=3,c=2
System.out.println(a); //3
System.out.println(b); //2
System.out.println(c); //2
int a = 1;
int b,c ;
b = --a; //a先-1,然后赋值 a=0,b=0
c = a--; //a先赋值给c,然后a再-1 a=-1,c=0
System.out.println(a); //-1
System.out.println(b); //0
System.out.println(c); //0
2、关系运算符
>、<、>=、<=、==、!=、instanceof
// 关系运算符只会返回布尔值类型的true、false
// instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
public static void main(String[] args) {
Object testObject = new ArrayList();
displayObjectClass(testObject);
}
public static void displayObjectClass(Object o) {
if (o instanceof Vector)
System.out.println("对象是 java.util.Vector 类的实例");
else if (o instanceof ArrayList)
System.out.println("对象是 java.util.ArrayList 类的实例");
else
System.out.println("对象是 " + o.getClass() + " 类的实例");
}
}
// 运行结果:对象是 java.util.ArrayList 类的实例
3、逻辑运算符
&&、||、!
boolean a = true;
boolean b = false;
a && b //False
a || b //True
!a //False
!b //True
4、位运算符
&、|、^、~、>>、<<、>>>
/*
A = 0011 1100
B = 0000 1101
-------------------
A&B 0000 1100
A|B 0011 1101
A^B 0011 0001
~B 1111 0010
--------------------
<< 相当于*2
>> 相当于/2
2*8=16 计算机怎么运算最快,进行位运算
2*2^3 = 2^4
2: 0000 0010
4: 0000 0100
4: 0000 1000
16: 0001 0000
2<<3
System.out.println(2<<3) // 16
*/
说明>>、<<,>>>
-
算术右移>>:低位溢出,符号位不变,用符号位补溢出的高位。相当于/2
-
算术左移<<:符号位不变,低位补零。相当于*2
-
逻辑右移>>>:低位溢出,高位补零
-
没有<<<符号
public static void main(String[] args) {
//1. 先得到 -1的原码 10000000 00000000 00000000 00000001
//2. -1的 反码 11111111 11111111 11111111 11111110
//3. -1的 补码 11111111 11111111 11111111 11111111
//4. 操作-1>>>1运算后的补码 01111111 11111111 11111111 11111111
//5. 运算后的原码 就是 01111111 11111111 11111111 11111111 (2的31次方减1)
System.out.println(-1>>>1); //2147483647
//6. 操作-1>>1运算后的补码 11111111 11111111 11111111 11111111
//7. 反码(补码-1) 11111111 11111111 11111111 11111110
//8. 原码 10000000 00000000 00000000 00000001 (-1)
System.out.println(-1>>1); //-1
}
原码、反码、补码
-
正数的原码、反码、补码都一样,最高位表示符号位为0,表示正号
-
负数的原码,数值部分和正数原码数值部分一样,最高位表示符号位为1,表示负号。负数的反码就是其原码除符号位外,按位取反。负数的补码等于其反码+1**
-
0的反码,补码都是0
-
Java里的数都是有符号的
-
计算机运算时,都是以补码的方式来运算的
-
看运算结果时,看原码
public static void main(String[] args) {
// int 4个字节
//1. 先得到 2的补码 => 2的原码 00000000 00000000 00000000 00000010
// 2的补码 00000000 00000000 00000000 00000010
//2. 3的补码 3的原码 00000000 00000000 00000000 00000011
// 3的补码 00000000 00000000 00000000 00000011
//3. 按位&
// 00000000 00000000 00000000 00000010
// 00000000 00000000 00000000 00000011
// 00000000 00000000 00000000 00000010 & 运算后的补码
// 运算后的原码 也是 00000000 00000000 00000000 00000010
// 结果就是 2
System.out.println(2&3);//2
//推导
//1. 先得到 -2的原码 10000000 00000000 00000000 00000010
//2. -2的 反码 11111111 11111111 11111111 11111101
//3. -2的 补码 11111111 11111111 11111111 11111110
//4. ~-2操作 00000000 00000000 00000000 00000001运算后的补码
//5. 运算后的原码 就是 00000000 00000000 00000000 00000001 => 1
System.out.println(~-2);//1
//推导
//1. 得到2的补码 00000000 00000000 00000000 00000010
//2. ~2操作 11111111 11111111 11111111 11111101 运算后的补码
//3. 运算后的反码 11111111 11111111 11111111 11111100
//4. 运算后的原码 10000000 00000000 00000000 00000011=>-3
System.out.println(~2); //-3
}
&&、||和&、|的区别
对于短路与&&而言,如果第一个条件为false ,后面的条件不再判断
对于逻辑与&而言,如果第一个条件为false ,后面的条件仍然会判断
public static void main(String[] args) {
int a = 4;
int b = 9;
int c = 20;
if (a < 1 && ++b < 50) {
}
if (a < 1 & ++c < 50) {
}
System.out.println("b=" + b + "\t" + "c=" + c);
}
//运行结果:b=9 c=21
5、三元运算符
格式:
如果条件表达式为真,则返回表达式1,假返回表达式2
public static void main(String[] args) {
int a = 10;
int b = 99;
int result = a > b ? a++ : b--;
System.out.println("result=" + result);
System.out.println("a=" + a);
System.out.println("b=" + b);
}

浙公网安备 33010602011771号