8.位运算
Posted qmillet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.位运算相关的知识,希望对你有一定的参考价值。
题一:【二进制中1的个数】
输入一个整数n,输出该数二进制表示中1的个数。其中负数用补码表示。
分析:常规解法:n的二进制每次和flag做与运算 =》查看当前位是否为1,如果是count++,然后将flag左移一位。
1 public class Solution { 2 public int NumberOf1(int n) { 3 int count=0; 4 int flag=1; 5 while(flag!=0){ 6 if((n&flag)!=0){ 7 count++; 8 } 9 flag = flag<<1;; 10 } 11 return count; 12 } 13 }
分析:巧妙解法--我们发现把一个整数减去一,都是把二进制最右边的1变成0.如果他的右边还有0,则所有的0变为1,而他的左边的所有未都保持不变。接下来我们把一个整数和他减去1的结果做与运算,相当于把他的最右边的1变成0。
1 public class Solution { 2 public int NumberOf1(int n) { 3 int count=0; 4 while(n!=0){ 5 n=n&(n-1); 6 count++; 7 } 8 return count; 9 } 10 }
以上是关于8.位运算的主要内容,如果未能解决你的问题,请参考以下文章