求两个数中二进制位不同的个数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
 int m = 0, n = 0, x = 0, y = 0;
 int i = 0, count = 0;
 printf("请输入m和n:\n");
 scanf("%d%d", &m, &n);
 for (i = 0; i < 32; i++)
 {
  x = (m >> i) & 1;            //将m的二进制中第i+1位的值赋给x
  y = (n >> i) & 1;             //将n的二进制中第i+1位的值赋给y
  if (x != y)                        //判断x和y是否相等
   count++;
     }
 printf("m和n有%d个位不同\n", count);

system("pause");
 return 0;
}

时间: 2024-10-15 17:25:05

求两个数中二进制位不同的个数的相关文章

求给定数据中最小的K个数

public class MinHeap { /* * * Top K个问题,求给定数据中最小的K个数 * * 最小堆解决:堆顶元素为堆中最大元素 * * * */ private int MAX_DATA = 10;//最小10个数 private int[] data;//存储数据 private int len;//当前存储长度,考虑到元素个数可能没有10个,这个时候全部输出 private MinHeap() { data = new int[MAX_DATA]; len=0; } pr

spoj 694 求一个字符串中不同子串的个数

SPOJ Problem Set (classical) 694. Distinct Substrings Problem code: DISUBSTR Given a string, we need to find the total number of its distinct substrings. Input T- number of test cases. T<=20; Each test case consists of one string, whose length is <=

(c语法百题4)求两数中的较大者

知识点: if语句 内容: 求两数中的较大者 输入说明: 一行两个数 输出说明: 一行 一个 数字 输入样例: 若题目没有特别说明,则应该以多组测试数据方式读取,或者参考a001. 3 5 输出样例 : 5 #include <stdio.h> int main() { int a,b,c; scanf("%d %d",&a,&b); if(a<b) { c=b; a=c; } printf("%d\n",a); return 0;

使用条件运算符取3个数中不大不小的那个数

使用条件运算符取3个数中不大不小的那个数,若a.b.c为3个不相等的整数,m为要求的a.b.c中不大不小的那个数,则可以使用下面的表达式: m = a>b?b>c?b:a>c?c:a:a>c?a:b>c?c:b;   如果使用if-else结构,等效代码如下: if(a>b){ if(b>c){ m = b; }else{ if(a>c){ m = c; }else{ m = a; } } }else{ if(a>c){ m = a; }else{ i

位操作(求[a, b] 中二进制位为1的个数最多的数)

传送门 题意:求区间[a, b]中二进制位为1的个数最多的那个数,如果存在多解,则输出最小的那个.(0 <= a <= b) 关键: 对一个数a可以利用 a | (a + 1) 来将a的二进制位中最低的0设置为1 附上代码: 1 #include <stdio.h> 2 3 typedef long long ll; 4 5 int main(void) { 6 int n; 7 scanf("%d", &n); 8 while (n-- > 0)

求整型中二进制1的个数

1. 确定二进制1的个数: ->循环死& ->x-1&x ->查表,分写死与动态生成,动态生成方法:BitsSetTable256[i] = (i &1) + BitsSetTable256[i /2]; ->并行位运算: int BitCount4(unsigned int n) {    n = (n &0x55555555) + ((n >>1) &0x55555555) ;    n = (n &0x3333333

求一个整数中二进制1的个数

题目:求一个整数二进制表示1的个数 第一版: 思路:如果一个整数与1做与运算,结果为1,那么该整数最右边一位是1,否则是0: int NumberOf1(int n) { int count = 0; while (n) { if (n&1)//如果一个整数与1做与运算的结果是1,表示该整数最右边是1,否则是0: { count++; } n = n>>1; } return count; } 缺点:因为代码当中有右移,当是负数的时候,要考虑符号位:如果一个正数,右移之后在最左边补n个

C#-求int数组中连续偶数列的个数

例如:[3, 3, 2, 2, 2, 4, 3, 5, 4, 6, 3]=>2,2,2,4;4,6 结果为2     [3, 3, 2,3, 2, 2, 4, 3, 5, 4, 6, 3]=>2;2,2,4;4,6 结果为3 实现思路: 将数组取余转换为01数组[3, 3, 2, 2, 2, 4, 3, 5, 4, 6, 3]=>[1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1] 算出连续为0的个数就是偶数列的个数 int[] arr = { 3, 3, 2, 2, 2,

利用最小堆找出10亿个数中最大的10000个数

最小堆 最小堆是一种完全二叉树,特点是根节点比两个子节点都小(或者根节点比子节点都大) 过程 先找10000个数构建最小堆 依次遍历10亿个数,如果比最小堆的最小值大,则替换这个最小值,并重新构建最小堆 最后输入10000个值 时间复杂度 构建最小堆的复杂度为 logn,求出最大m个数会构建m次最小堆,时间复杂度为 m logm, 这里m为10000 进行n次时间复杂度为n,这里n为10亿,总时间复杂度为 n m logm,即10亿 10000 log 10000 其他算法 将十亿个数排序,找出