zoukankan      html  css  js  c++  java
  • Java中的按位操作——Java编程思想笔记

    欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/40450421



            Java中的按位操作符有四个,分别是&(按位与)、|(按位或)、^(按位异或)、~(按位非)。

    1、先来看按位与(&)

    public class Main {
    
        public static void main(String[] args) {
    
            //按位与,两1得1,遇0得0
            System.out.println(Integer.toBinaryString(13));
            System.out.println(Integer.toBinaryString(11));
            System.out.println(Integer.toBinaryString(13&11));
    
            
        }
    }
    结果为:

    1101
    1011
    1001

    从结果可以清晰的看到,与的规则为:两位相与,若有一位为0,则结果为0,否则为1。






    2、然后是按位或(|)

    <span style="font-size:18px;">public class Main {
    
        public static void main(String[] args) {
    
            //按位或,两0得0,遇1得1
            System.out.println(Integer.toBinaryString(13));
            System.out.println(Integer.toBinaryString(11));
            System.out.println(Integer.toBinaryString(13|11));
    
        }
    }</span>
    结果为:

    1101
    1011
    1111
    这样就得到了按位或的结果






    3、接下来是按位异或

    public class Main {
    
        public static void main(String[] args) {
    
            //按位异或:两位不同得1,两位相同得0
            System.out.println(Integer.toBinaryString(13));
            System.out.println(Integer.toBinaryString(11));
            System.out.println("0"+Integer.toBinaryString(13^11));
    
        }
    }

    结果为:

    1101
    1011
    0110
    不同得1,相同得0


    按位异或有一个有意思的用法,它可以不用第三方变量,交换两数的值,如下

    public class Main {
    
        public static void main(String[] args) {
    
            //使用按位异或交换两数的值
            int temp1=10;
            int temp2=114;
            System.out.println("交换前:temp1:"+temp1);
            System.out.println("交换前:temp2:"+temp2);
            temp1^=temp2;
            temp2^=temp1;
            temp1^=temp2;
            System.out.println("交换后:temp1:"+temp1);
            System.out.println("交换后:temp2:"+temp2);
    
        }
    }
    结果为:

    交换前:temp1:10
    交换前:temp2:114
    交换后:temp1:114
    交换后:temp2:10
    这个是有依据的,这样来看,

    第一步:temp1^=temp2,即temp1=temp1^temp2

    第二步:temp2=temp2^temp1=temp2^(temp1^temp2),异或满足交换律,去括号后最后得到temp2=temp1

    第三步:temp1=temp1^temp2=(temp1^temp2)^temp2=temp1^temp2^temp1=temp2

    经过这三步,顺利交换了两变量的值。

    这个方法告诉我们,可以在C++中这样实现swap函数

        void swap(int &a, int &b){
            a^=b;
            b^=a;
            a^=b;
        }
    这里使用了传引用,当然你也可以用传指针的方式实现




    4、最后是按位非(~)

    public class Main {
    
        public static void main(String[] args) {
    
            //按位非:逐位取反
            System.out.println("0000000000000000000000000000"+Integer.toBinaryString(13));
            System.out.println(Integer.toBinaryString(~13));
    
        }
    }
    
    结果为:

    00000000000000000000000000001101
    11111111111111111111111111110010




    欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/40450421





    版权所有,转载请注明出处 http://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/
  • 相关阅读:
    linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top
    Linux vmstat命令实战详解
    dstat 性能监测工具
    sysstat 工具
    Linux命令详解----iostat
    Linux CPU实时监控mpstat命令详解
    Linux Top 命令解析 比较详细
    Linux统计/监控工具SAR详细介绍
    ubuntu 添加用户到已存在的组
    Ubuntu 14.04 使用速度极快的Genymotion 取代蜗牛速度的原生AVD模拟器
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12042000.html
Copyright © 2011-2022 走看看