C编程练习013

1、题目

分享一道CVTE(广州视源电子科技股份有限公司)的面试笔试题:

世界上有两种人,一种懂二进制,一种不懂。那么你知道两个 int32 整数 m 和 n 的二进制表达,有多少个位(bit)不同么? 输入示例:1999 2299 输出示例:7

2、代码

#include <stdio.h>

int countBitDiff(int m, int n);

int main(void)
{
    int m, n, count;

    printf("请输入两个数:");
    scanf("%d %d", &m, &n);
    count = countBitDiff(m, n);
    printf("%d与%d共有%dbit不同\n", m, n, count);

    return 0;
}

int countBitDiff(int m, int n) 
{
    int temp = m^n;    //异或运算后为1的位即为m,n不相同的位
    int count = 0;
    int len = sizeof(int)*8;

    while ( len-- )
    {
        /* 从低位至高为寻找temp的位中1的个数 */
        if ( temp & 0x01 )  
        {
         count++;
        }
        temp >>= 1;  //temp右移一位
    }

    return count;
}

题目要比较两个int32的整数的不同的bit有多少,首先想到C语言的按位异或运算:参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即: 0^0=0,1^0=1,0^1=1,1^1=0。以上程序中,首先使用一个变量temp存储两个int32的整数m,n异或后的结果,再用temp的低位至高位和0x01做按位与运算,且前提条件是长度len为真。

3、运行结果

ZGkzid.png


我的微信公众号:嵌入式大杂烩

VcSFJJ.md.png


 上一篇
【C语言笔记】main()函数的几种形式 【C语言笔记】main()函数的几种形式
在C语言中,main函数是程序的入口。其有四种写法,即: //写法一 main() { printf("Hello notepad++ \n"); } //写法二 int main(void) { printf("Hello note
2018-10-02
下一篇 
C编程练习012 C编程练习012
题目 小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。例如:半径的平方如果为25优雅的点就有:(+/-3, +/-4), (
2018-06-19
  目录