zoukankan      html  css  js  c++  java
  • 位运算-二进制中1的个数

    &(与)运算特点:

    定义:参加运算的两个数据,按二进制位进行“与”运算。

    运算规则:

    0&0=0  0&1=0  1&0=0  1&1=1

    总结:两位同时为1,结果才为1,否则结果为0

    例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。

    注意:负数按补码形式参加按位与运算。

    与:都为1结果为1

    题目

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

    解题思路

    这里的题目有三种解法,先从最基本的说 探测某一位是否为1,先拿1从左到右运算,整数无非就是32位,所以这里的思路就是32位循环,每一次将1移动到相应的位置上,和二进制数进行 &(与) 运算。

    看图解法一

    假设我们设N为整数, 1向左进行位运算可得一下计算公式:

    (N&(1<<i))==(1<<i)

    解法二

      如下公式:

    ((N>>>i)&1)==1

    解法三

    如下公式:
    N=((N-1)&N)





    代码实现:
    import java.util.Scanner;
    
    public class three{
    //题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。列:9的二进制表示为1001,有2位是1
        public static void main(String args[]){
            //java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            //创建Integer对象,并通过toString()方法获取到整数N的二进制无符号整数形式;
            System.out.println(Integer.toString(N,2));
    
            //用count初始化作为计算1的次数
            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){
                    count++;
                }
            }
            System.out.println(count);
    
            //解法三
            count=0;
            while(N!=0){
                N=((N-1)&N);
                count++;
            }
            System.out.println(count);
    }
    
    }


  • 相关阅读:
    松软科技web课堂:JavaScript 比较和逻辑运算符
    松软科技web课堂:JavaScript 布尔(逻辑)
    松软科技web课堂:随机Math.random()
    松软科技web课堂:JavaScript Math 对象
    松原网站建设,巨惠分享0元11月启动
    松原本地专业网站建设,公众号,微网站,小程序定制开发
    JavaScript 日期格式
    松软科技前端课堂:JavaScript 日期
    松软科技web课堂:JavaScript 数组迭代方法
    安装npm install app-inspector -g 提示错误
  • 原文地址:https://www.cnblogs.com/daiorz/p/12732011.html
Copyright © 2011-2022 走看看