首页 > 试题广场 >

bit位数

[编程题]bit位数
  • 热度指数:2704 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
两个整数 m 和 n 的二进制表达中有多少个位(bit)不同?

数据范围:

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


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

输入

15 8

输出

3

说明

15的二进制表示中后四位是 1111 , 3的二进制表示中后四位是 0011,因此有两位不同 

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)
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)
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int m, n;
  fscanf(stdin, "%d %d", &m, &n);
  return fprintf(stdout, "%d", __builtin_popcount(m ^ n)), 0;
}

发表于 2021-07-24 10:42:18 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int sum=0;
        String ml = Integer.toBinaryString(m);
        String nl = Integer.toBinaryString(n);
        int q = new StringBuffer(ml).length() > new StringBuffer(nl).length() ? new StringBuffer(ml).length():new StringBuffer(nl).length();
        char[] mArr = new char[q];
        char[] nArr = new char[q];
        for(int i=0;i<q;i++){
            mArr[i]=nArr[i]='0';
        }
        
        for(int i=q-1,j=ml.length()-1;i>=0 && j>=0;i--,j--){
            mArr[i] = ml.charAt(j);
        }
        
        for(int i=q-1,j=nl.length()-1;i>=0 && j>=0 ;i--,j--){
            nArr[i] =nl.charAt(j);
        }
        
//        for(int i =0;i<q;i++){
//            System.out.print(mArr[i]+" ");
//        }
//        System.out.println();
//        for(int i =0;i<q;i++){
//            System.out.print(nArr[i]+" ");
//        }
//        
        for(int i=0;i<q;i++){
            if(mArr[i]!=nArr[i]){
                sum++;
            }
        }
        System.out.println(sum);
    }
}


常规的逻辑思维问题。理清思路,不难。
发表于 2019-05-24 17:26:16 回复(0)
两数异或一下,然后数个数
发表于 2019-02-26 10:20:51 回复(0)
#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)
#include <stdio.h>
#include <stdlib.h>
int main()
{
    unsigned int x,y;
    while(scanf("%d %d",&x,&y)!=EOF)
    {
        unsigned int temp=x^y;
        int count=0;
        while(temp)
        {
            if(temp%2)
            {
                count++;
            }
            temp/=2;
        }
        printf("%d\n",count);
    }
    return 0;
}

发表于 2021-08-20 21:25:00 回复(0)
#include<iostream>
using namespace std;
int main(){
    int x,y;
    cin>>x>>y;
    int p=x^y;
    int result=0;
    while(p){
        result++;
        p=p&(p-1);
    }
    cout<<result<<endl;
    return 0;
}

发表于 2020-11-28 22:01:09 回复(0)
#include<iostream>
int main()
{
    int m,n;
    while(std::cin>>m>>n)
    {
        int c=m^n;
        int count=0;
        while(c)
        {
            c=c&(c-1);
            count++;
        }
        std::cout<<count<<std::endl;
    }
    return 0;
}
发表于 2020-09-13 11:39:24 回复(0)
m, n = map(int, input().split())
print(bin(m ^ n).count('1'))

发表于 2020-07-16 13:33:51 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int ans=__builtin_popcount(n^m);
    printf("%d\n",ans);
}

发表于 2020-07-03 13:49:02 回复(0)
a, b = map(int,input().split())

m1 = eval(bin(a))   #整数a的二进制
m2 = eval(bin(b))         #整数a的二进制

f = bin(m1^m2).replace('0b','')

print(f.count('1'))

发表于 2020-06-21 09:58:52 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main(){
    int m,n;
    cin>>m>>n;
    unsigned int m_ = (unsigned)m;
    unsigned int n_ = (unsigned)n;
    unsigned i = 1;
    int ans = 0;
    for(int j=0;j<32;++j){
        if((i&m_)^(i&n_))
            ++ans;
        i<<=1;
    }
    cout<<ans<<endl;
    return 0;
}
发表于 2020-06-13 23:47:47 回复(0)
Java最简单的写法
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            System.out.println(Integer.bitCount(sc.nextInt()^sc.nextInt()));
        }
    }
}

发表于 2020-06-13 00:13:51 回复(0)
#include<bits/stdc++.h>

using namespace std;

int main()
{
	int z, x, i = 0, j = 0, index = 0;
	cin >> z >> x;
	bitset<32> bs1(z), bs2(x);
	while (i != bs1.size() && j != bs2.size())if (bs1[i++] != bs2[j++])index++;
	cout << index;
}

发表于 2020-04-10 16:43:18 回复(0)
import sys
def main():
	line = sys.stdin.readline()
	a,b = map(int,line.split())
	
	
	a = bin(a).replace("0b","")
	b = bin(b).replace("0b","")
	n = max(len(a),len(b))
	a = a.rjust(n,'0')
	b = b.rjust(n,'0')
	count = 0
	for i in range(n):
		if a[i]!=b[i]:
			count+=1
	print(count)

if __name__ == '__main__':
	main()

发表于 2020-03-28 21:06:01 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){

    int m, n;
    cin >> m >> n;
    int res = 0;
    for(int i = 0; i < 32; ++i){
        res += ((((1 << i) & m) >> i) ^ (((1 << i) & n) >> i));
    }
    cout << res << endl;

    return 0;
}
发表于 2019-08-17 19:32:57 回复(0)
#include <iostream>
using namespace std;
int main()
{
    int m,n,s,count=0;
    cin>>m>>n;
    s=m^n;//按位异或不同为1
    while(s!=0)  //求1的个数
    {
        s=s&(s-1);
        count++;
    }
    cout<<count;
}


发表于 2019-08-16 11:32:48 回复(0)
m,n=map(int,input().split())
b=[int(x) for x in '{0:b}'.format(m^n)]
print(b.count(1))
发表于 2019-07-02 09:47:31 回复(0)

问题信息

上传者:小小
难度:
33条回答 3651浏览

热门推荐

通过挑战的用户

查看代码