Java中的操作符

Java中的操作符

赋值和地址引用

两者的区别

package com.cloud.day4;

public class Demo1 {

   public static void main(String[] args) {

      Fish f1 = new Fish();

      Fish f2 = new Fish();

      f1.count = 22;

      f2.count = 33;

      /*基本数据类型的赋值操作*/

      f1.count = f2.count;

      f1.count = 55;

      System.out.println(f1.count); //55

      System.out.println(f2.count); //33

      /*引用类型的地址传递操作*/

      f1 = f2;

      f1.count = 66;

      System.out.println(f1.count); //66

      System.out.println(f2.count); //66

   }

}

class Fish{

   int count;

}

 

名称混调问题

package com.cloud.day4;

public class Demo2 {

   static void getA(Level e1){

      e1.a = 22;

   }

   public static void main(String[] args) {

      Level e2 = new Level();

      e2.a = 33;

      System.out.println(e2.a); //33

      getA(e2);

      System.out.println(e2.a); //22

   }

}

class Level{

   int a;

}

基本操作符

数值运算

package com.cloud.day4;

public class Demo3 {

   public static void main(String[] args) {

      /*整数的除法会直接去掉小数部分*/

      System.out.println(3/2);  //1

      System.out.println(10/3);  //3

      /*改变变量的正负*/

      int x = 22;

      int y = 0;

      System.out.println(y = -x); //-22

      System.out.println(y = (-x)*10);  //-220

      /*自增自减:在前先运算,在后后运算*/

      int i = 1;

      System.out.println("i:"+ ++i); //2

      System.out.println("i:"+ i--); //2

   }

}

 

关系运算

package com.cloud.day4;

public class Demo3 {

   public static void main(String[] args) {

      /*基本的变量之间的比较*/

      int x = 2,y = 3;

      System.out.println(x = y);  //3

      System.out.println(x == y);  //true

      System.out.println(x != y);  //false

      /*对象之间的比较: '=='值和地址的引用都要相同*/

      Integer i1 = new Integer(33);

      Integer i2 = new Integer(33);

      System.out.println(i1 == i2);  //false

      System.out.println(i1 != i2);  //true

      /*单纯的比较对象的值*/

      System.out.println(i1.equals(i2)); //true

      /*equals的本质:不同的类覆盖的equals不同*/

      Test t1 = new Test();

      Test t2 = new Test();

      t1.i = t2.i = 66;

      //没有覆盖equals方法

      System.out.println(t1.equals(t2));  //false

   }

}

class Test{

   int i;

}

条件中断

package com.cloud.day2;

public class Demo1 {

   public static boolean test1(int t1){

      System.out.println("test1");

      return t1<1;

   }

   public static boolean test2(int t2){

      System.out.println("test2");

      return t2<2;

   }

   public static void main(String[] args) {

      /*test1test2&&*/

      if(test1(0)&&test2(1)){

        System.out.println("&&");

      }

      /*test1|| 这里的第二个条件就没有执行*/

      if(test1(0)||test2(1)){

        System.out.println("||");

      }

      /*test1test2||*/

      if(test1(2)||test2(1)){

        System.out.println("||");

      }

   }

}

位运算操作

基本概念

概念:就是逢二进一就是二进制,二进制只有两个数,0和1,简单易于电子方式的实现,

     同时0和1的组合可以表示任意一个数

 

基础:

一个整形int占4个字节

每个字节占8位

一个汉字占两个字节

原码、反码、补码

1.      原码

用二进制表示一个数,这个码就是原码

1--à原码是   00000000 00000000  00000000  00000001 表示1*2的0次方就是1

       00000000 00000000  00000000  00000101  表示1*2的0次方 + 0*0的1次方 +1*2的2次方  1+0+4=5 这个码就表示5

2.      反码

3.      补码

 

A. 二进制的最高位是符号位,1表示负数,0表示正数

B. 正数的原码,反码,补码都是一样的

C. 负数的反码=他原码的符号位不变,其余取反,1变0,0变1

-1原码  10000000 00000000 00000000000000001  开头的1表示负数

-1反码  11111111 11111111 11111111111111110

-1补码  11111111 11111111 11111111111111111

D. 负数的补码=它反码 +1

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

F.  在计算运算的时候都是以补码的方式运算的

位运算规则

案例:

1.       ~2=??

步骤:

计算机预算补码

整数原码,补码,反码都是一样的

2的原码

00000000  00000000 00000000  00000010

 

~2,按位取反:

11111111  11111111 11111111  11111101  负数

 

推出反码(补码—1

11111111  11111111 11111111  11111100

 

推出其原码(符号位不变)

10000000  00000000 00000000  00000011

 

结果就是  3

 

2.      ~-5=??

步骤:

-5原码:

10000000  00000000 00000000  00000101

-5反码:

11111111  11111111 11111111  11111010

-5补码:

11111111  11111111 11111111  11111011

~-5取反:

00000000  00000000 00000000  00000100  是正数,原码,反码,补码一样

结果是:4

3.      2&3,两个都是1才是1

步骤:

2的补码:00000000 00000000  00000000  00000010

3的补码:00000000 00000000  00000000  00000011

2&3    00000000  00000000 00000000  00000010 补码运算,还是补码

结果:2

4.       2|3,一个为1就是1

步骤:

2的补码:00000000 00000000  00000000  00000010

3的补码:00000000 00000000  00000000  00000011

2|3    00000000  00000000 00000000  00000011

结果:3

5.      2^3,一个是0,一个是1,结果才是1

步骤:

2的补码:00000000  00000000 00000000  00000010

3的补码:00000000 00000000  00000000  00000011

2^3    00000000  00000000 00000000  00000001

结果:1

移位运算

类型:   <<(左移)   >>(右移)

运算规则:

算术右移:低位溢出,符号位不变,并用符号位补溢出的高位

案例:  1>>2

1的补码:00000000  00000000 00000000  00000001

1>>2     00000000  00000000 00000000  00000000

结果:0

 

算术左移:符号位不变,低位补0

案例:

1<<2

1的补码:

00000000 00000000  00000000  000000001

向左移动:

00000000 00000000  00000000  000000100

结果:4

三元操作符

package com.cloud.day2;

public class Demo2 {

   static int test(int i){

      if(i>5){

        return i-5;

      }else{

        return i+5;

      }

   }

   public static void main(String[] args) {

      int result = test(6);

      System.out.println(result);

   }

}

操作符的错误使用

逻辑判断和赋值

int x=2,y=2;

if(x=y){}

while(x=y){}

类型转换

package com.cloud.day2;

public class Demo2 {

   public static void main(String[] args) {

      int x=2,y=2;

      long lg = x;

      System.out.println("自动类型转换:"+lg);

      y = (int) lg;

      System.out.println("强制类型转换:"+y);

   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值