1.原數字不動,1左移,如果將1左移i位與N與後,與1左移後相等,證明i位爲1。
package 位運算;
import java.util.Scanner;
public class numberofone {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);//Scanner類可以掃描字符串和基本類型數據進行分析,正則表達式
int N=sc.nextInt();//scanner類的方法用來讀取INT型數據
System.out.println(Integer.toBinaryString(N));//輸出N的二進制形式
int count=0;
for(int i=0;i<32;i++)
{
if((N& (1<<i))==(1<<i))//將1左移i位與N與後,與1左移後相等,證明i位爲1
{count++;}
}
System.out.println(count);
}
}
2.數字右移,最後一位與1與運算,與後結果爲1,則i位爲1。
package 位運算;
import java.util.Scanner;
public class numberofone {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);//Scanner類可以掃描字符串和基本類型數據進行分析,正則表達式
int N=sc.nextInt();//scanner類的方法用來讀取INT型數據
System.out.println(Integer.toBinaryString(N));//輸出N的二進制形式
int count=0;
for(int i=0;i<32;i++)
{
if(((N>>i)&1)==1)//將N右移i位後與1做與運算,若結果爲1,則證明第i位爲1
{count++;}
}
System.out.println(count);
}
}
3.將原數字減1後與原數字做與運算,直至與運算結果爲0。
示意圖:
代碼:
Scanner sc=new Scanner(System.in);//Scanner類可以掃描字符串和基本類型數據進行分析,正則表達式 int N=sc.nextInt();//scanner類的方法用來讀取INT型數據 System.out.println(Integer.toBinaryString(N));//輸出N的二進制形式 int count=0; while(N!=0) { N=(N-1)&N;//關鍵代碼 count++; } System.out.println(count);