六大金刚运算符---位运算符

雨霖先森 2022-09-22 19:07:08

六大金刚运算符---位运算符

位运算符

符号:&、|、^、<<、>>、>>>

理解:将十进制的数据转换为二进制做运算

1.基本使用

1.&与:同位比较,两者为1,结果才为1

public class 文件名{
    public static void main(String[] args){
        byte num1 = 23;//0001,0111
        byte num2 = 9; //0000,1001
                       //0000,0001
        //底层原理:
        //num1 - byte:0001,0111
        //        int:0000,0000,0000,0000,0000,0000,0001,0111
        //num2 - byte:
        //        int:0000,0000,0000,0000,0000,0000,0000,1001
        // 做运算    :0000,0000,0000,0000,0000,0000,0000,0001
        //     (byte):0000,0001
        byte result = (byte)(num1 & num2);
        System.out.println(result);//1 -- 0000,0001
    }
}

2.|或:同位比较,两者有1,结果就为1

public class 文件名{
    public static void main(String[] args){
        int num1 = 23;//0000,0000,0000,0000,0000,0000,0001,0111
        int num2 = 9; //0000,0000,0000,0000,0000,0000,0000,1001
                      //0000,0000,0000,0000,0000,0000,0001,1111
        System.out.println(num1 | num2);//31 - 0000,0000,0000,0000,0000,0000,0001,1111
    }
}

3.^异或:同位比较,两者相同为0,不同为1

public class 文件名{
    public static void main(String[] args){
        int num1 = 23;
  //0000,0000,0000,0000,0000,0000,0001,0111
        int num2 = 9;                 //0000,0000,0000,0000,0000,0000,0000,1001
                      //0000,0000,0000,0000,0000,0000,0001,1110
        System.out.println(num1 ^ num2);//30 - 0000,0000,0000,0000,0000,0000,0001,1110
    }
}

4.<<左移:整体向左移动n位,就用n个0补位

注意:补到最后

public class 文件名{
    public static void main(String[] args){
      int num1 = 1024;
 //0000,0000,0000,0000,0000,0100,0000,0000                  
        System.out.println(num1 << 2);//4096
 //0000,0000,0000,0000,0001,0000,0000,0000
    }
}

5.>>右移:整体向右移动n位,就用n个最高位补位

注意:补到最前

public class 文件名{
    public static void main(String[] args){
      int num1 = 1024;
 //0000,0000,0000,0000,0000,0100,0000,0000                  
        System.out.println(num1 << 2);//4096
 //0000,0000,0000,0000,0001,0000,0000,0000
    }
}

6.>>>无符号位右移:整体向右移动n位,就用n个0补位

注意:补到最前

public class 文件名{
    public static void main(String[] args){
      int num3 = 1024;
  //0000,0000,0000,0000,0000,0100,0000,0000
                        //0000,0000,0000,0000,0000,0001,0000,0000
        System.out.println(num3 >>> 2);//256
        
        int num4 = -1024;
 //1111,1111,1111,1111,1111,1100,0000,0000
                         //0011,1111,1111,1111,1111,1111,0000,0000
        System.out.println(num4 >>> 2);//1073741568
    }
}

2.基本使用

经典面试题一:使用最有效率的方式计算出4*8

public class 文件名{
    public static void main(String[] args){
    System.out.println(4<<3);//32
        //0000,0000,0000,0000,0000,0000,0000,0100
        //0000,0000,0000,0000,0000,0000,0010,0000
    }
}

经典面试题2:描述出下列代码的运行结果

public class 文件名{
    public static void main(String[] args){
    System.out.println((int)(char)(byte)-1);//65535
//-1 int:1111,1111,1111,1111,1111,1111,1111,1111
//(byte):1111,1111
//(char):1111,1111,1111,1111            
//(int) :0000,0000,0000,0000,1111,1111,1111,1111
    }
}

3.扩展

&、|、^:前后为数值,符号为位运算符 &、|、^:前后为boolean值,符号为逻辑运算符

右移和无符号位右移在处理正数时是一样的

4.运算符的优先级别

 

 

 

...全文
37 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧