位运算(1的个数;2.判断奇偶)

1.

1的个数

int NumberOf1(int n){
int count = 0;
   while(n)
 {
    ++count;
    n=(n-1)&n;
 }
}

 

同样一个问题,位运算可以提高程序的运行效率。

下面讲一下关于奇偶性的判断。

 

常规方法

public static boolean isOdd(int i){

        return i % 2 != 0;

}

 

位运算方法

public static boolean isOdd(int i){

        return (i & 1) != 0;

public boolean isOdd(int a){   
    if((a&1) != 1){   //是奇数   
        return true;   
    }   
    return false;   
}  

说明:

我们知道计算机中的数字通常用二进制补码表示。

如果为正数,补码与原码相同,直接看最后一位(因为数字1的前面N位均为0,跟它做与运算,前面肯定为0),奇数为1,偶数为0,与1相与,结果不变。

如果为负数,补码转原码:保持符号位不动,其它各位取反+1,即为负数的绝对值原码全部取反+1。还是看最后1位,先取反,再+1,结果还是和原来相同。进行与运算时还是原来的末位,所以用跟1做与运算还是保持原来的结果。
---------------------
作者:taizhoufox
来源:CSDN
原文:https://blog.csdn.net/taizhoufox/article/details/4583243
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/nickup/p/9809383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值