zoukankan      html  css  js  c++  java
  • 位运算-二进制中1的个数(三种解法)

    题目一:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。如9的二进制表示为1001,有2位是1.

      实例代码:

    import java.util.Scanner;
    
    public class 二进制中1的个数 {
    
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		int N = scanner.nextInt();
    		System.out.println(Integer.toString(N,2));  // 输出二进制数
    		
    		//解法一 
    		int count = 0;
    		// 比对每一位
    		for (int i = 0; i < 32; i++) {
    			if ((N&(1<<i))==(1<<i)) {
    				count++;
    			}
    		}
    		System.out.println(count);
    		
    		//解法二
    		count = 0;
    		for (int i = 0; i < 32; i++) {
    			if (((N>>>i)&1)==1) {               // >>> 运算符用 0 填充高位;>> 运算符用符号位填充高位,没有<<<运算符
    				count++;
    			}
    		}
    		System.out.println(count);
    		
    		//解法三  把一个整数n减去1,再和原来的整数与运算,会把该整数的最右边的1变成0,
    		// 那么,一个整数的二进制中有多少个1,就可以进行多少次这样的操作。循环结束的条件是n为0
    		count = 0;
    		while(N!=0){
    			N = ((N-1)&N);
    			count++;
    		}
    		System.out.println(count);
    	}
    
    }
    

      运行结果:

        

    题目二:用一条语句判断一个整数是不是2的整数次方。

      思路:一个整数如果是2的整数次方,那么它的二进制表示中有且仅有一个位是1,而其他所有位都是0,根据上面解法三的分析,把这个整数减去1后再与自己相与,唯一的1也会变成0.注意这里不用考虑2的-1次方之类,因为2的-1次方等与0.5,是一个浮点数,与题目不符。

      实例代码:

    import java.util.Scanner;
    
    public class Test {
    	// 异或运算
    	public static void main(String args[]){
    		Scanner scanner = new Scanner(System.in);
    		int N = scanner.nextInt();
    		System.out.println(Integer.toString(N,2));
    		if (((N-1)&N)==0) {   // 关键一条语句
    			System.out.println("True");
    		}else {
    			System.out.println("False");
    		}
        }
    }
    

      运行结果:

        

  • 相关阅读:
    centos升级glibc(升级到 2.17版)
    访问zabbix首页无法正常登陆
    解决zbx的web界面zabbix服务器端运行中 显示为不(启动命令)
    4. 日期
    3. 页面滚动条位置恢复
    2. 添加版本号
    1. webpack 复制文件
    4. git log的常见用法
    3. git获取历史版本
    2. Git-命令行-删除本地和远程分支
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/10249006.html
Copyright © 2011-2022 走看看