二进制黑科技

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

总结一下平常使用二进制地方的程序。更多的小技术可以查看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)-n
public 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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值