首页 > 试题广场 > bit位数
[编程题]bit位数

两个int32整数m和n的二进制表达,计算有多少个位(bit)不同?


输入描述:
一行中给定两个数字


输出描述:
输出这两个数字中bit不同的个数
示例1

输入

15 8

输出

3

11个回答

添加回答

python3两行

a, b = map(lambda c: bin(int(c)).replace("0b", "").rjust(32, '0'), input().split())
print(sum(map(lambda c: a[c] != b[c], range(32))))
  • 第一行:统一格式,将a,b转化成32位二进制格式字符串

  • 第二行,对32位分别进行计算判断是相同,将结果累加。

发表于 2019-02-24 11:43:26 回复(0)
import java.util.*;

public class Main {
    private static final int MAX = 1005;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n1 = sc.nextInt(), n2 = sc.nextInt();
        int count = 0;
        for (; n1 != 0 || n2 !=0; n1 >>= 1, n2 >>= 1) {
            if ((n1 & 1) != (n2 & 1)) {
                count++;
            }
        }
        System.out.println(count);
    }
}
发表于 2019-02-05 23:10:23 回复(2)
#include <bits/stdc++.h>

using namespace std;

int main()
{     int a,b;     while(cin>>a>>b)      {         int cnt = 0;         int c = a^b;         while(c)         {             cnt += (c&1);             c>>=1;         }         cout<<cnt<<endl;     }     return 0;
}

发表于 2019-01-19 02:31:01 回复(0)
import java.util.Scanner;

/**
 * @author wylu
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int xor = scanner.nextInt() ^ scanner.nextInt();
            int count = 0;
            while (xor != 0) {
                xor &= (xor - 1);
                count++;
            }
            System.out.println(count);
        }
    }
}


编辑于 2019-01-11 19:07:47 回复(0)
x, y = map(int, input().split(' '))
xor = x ^ y;
res = 0
while xor:
    res += xor & 1 # 最后一位是不是 1
    xor = xor >> 1 # 向右移
print(res)

发表于 2019-03-14 15:31:05 回复(0)
两数异或一下,然后数个数
发表于 2019-02-26 10:20:51 回复(0)
import java.util.Scanner;



public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        String strX = to32string(x);
        String strY = to32string(y);
         int sum=0;
        for(int i=0;i<strX.length();i++) {
             if(strX.charAt(i)!=strY.charAt(i)) {
                 sum++;
             }
         }
        System.out.println(sum);
    }
    
    public static String to32string(int x ) {
        String strX = Integer.toBinaryString(x);
        String ret = "";
        for(int i=0;i<32-strX.length();i++) {
            ret +="0";
        }
        return ret+strX;
    }
 
     
     
    public Main() {
        super();
    }

}
发表于 2019-01-30 15:18:52 回复(0)
发表于 2019-01-29 22:14:37 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        in.close();
        int ans = 0;
        int nums = m ^ n; //相同的为0 不同的为1 异或
        while(nums!=0){
            nums &= (nums-1);
            ans += 1;
        }
        System.out.println(ans);
    }
}
发表于 2019-01-25 16:49:52 回复(0)
#include <iostream>
using namespace std;
int main(void)
{
    int m,n;
    cin>>m,cin>>n;
    int num=m^n;
    size_t cont=0;
    for(int i=0;i<32;i++)
        if(1<<i&num)
            cont++;
    cout<<cont;
    return 0;
}
发表于 2019-01-24 17:08:20 回复(0)
```
import java.util.Scanner;
 
public class Main
{
    public static int bitCount(int a, int b)
    {
        return Integer.bitCount(a^b);
    }
     
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext())
        {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            System.out.print(bitCount(a,b));
        }
    }
}
```
调用Integer.bitcount()
或者利用 x&(x -1) , 看能进行多少次这样的操作

发表于 2019-01-17 13:45:50 回复(0)

扫一扫,把题目装进口袋

牛客网,程序员必备求职神器

扫描二维码,进入QQ群

扫描二维码,关注牛客网公众号

  • 公司地址:北京市朝阳区大屯路东金泉时代3-2708北京牛客科技有限公司
  • 联系方式:010-60728802(电话) admin@nowcoder.com
  • 牛客科技©2018 All rights reserved
  • 京ICP备14055008号-4
  • 京公网安备 11010502036488号