运算符

 

运算符

 

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
*/

说明>>、<<,>>>

  1. 算术右移>>:低位溢出,符号位不变,用符号位补溢出的高位。相当于/2

  2. 算术左移<<:符号位不变,低位补零。相当于*2

  3. 逻辑右移>>>:低位溢出,高位补零

  4. 没有<<<符号

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
}

 

原码、反码、补码

  1. 正数的原码、反码、补码都一样,最高位表示符号位为0,表示正号

  2. 负数的原码,数值部分和正数原码数值部分一样,最高位表示符号位为1,表示负号。负数的反码就是其原码除符号位外,按位取反。负数的补码等于其反码+1**

  3. 0的反码,补码都是0

  4. Java里的数都是有符号的

  5. 计算机运算时,都是以补码的方式来运算的

  6. 看运算结果时,看原码

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

如果条件表达式为真,则返回表达式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);
}

 

posted @ 2021-12-14 15:36  codeSpiderMan  阅读(85)  评论(0)    收藏  举报