二进制黑科技

来源:互联网 发布:淘宝零点抢购 编辑:程序博客网 时间:2024/04/29 18:32

俗话说的好啊,世界上有两种人,一种知道二进制,一种不知道二进制。开个玩笑。

总结一下平常使用二进制地方的程序。更多的小技术可以查看Integer的源码。
1)用位运算来代替 :第三个变量作为两数的交换。

// 比如我们要交换a和b,注意a和b的类型int a = 10,b = 20;a = a^b;b = a^b;a = a^b;// 其中使用的原理就是:n^n=0,0^n=n。

2)奇偶性判断

public boolean isEven(int n) {    return  n&1==0;  //实现原理:利用2进制数中第一位为1则该数属于奇数,为0则为偶数。}

3)利用二进制实现乘法。

//1.实现n*7,n*9等等;   实现原理:n<<1 等价于n*2; n>>1等价于n/2; --->延伸出n*7 = n(2^3)-npublic int getNum(int n) {    // return (n<<3)-n;   //n*7    // return (n<<3)+n;   //n*9}

4)统计某数中1的个数

    //消除数字中最右边的1,并返回结果    public int  removeOne(int num) {        return num&(num-1); //实现原理:与运算:同1为1,有0为0。让一个数 与上 让它减1的数。    }    //返回该数的二进制中1的个数    public int countOne(int num) {        int count = 0;        while(num!=0) {            num = removeOne(num); //调用一次,消除一次最右边的1            count++;          }        return count;    }