查看原文
其他

C语言每日一练(013)

点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间阅读编程笔记!

题目

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

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

代码

  1. #include <stdio.h>


  2. int countBitDiff(int m, int n);


  3. int main(void)

  4. {

  5. int m, n, count;


  6. printf("请输入两个数:");

  7. scanf("%d %d", &m, &n);

  8. count = countBitDiff(m, n);

  9. printf("%d与%d共有%dbit不同\n", m, n, count);


  10. return 0;

  11. }


  12. int countBitDiff(int m, int n)

  13. {

  14. int temp = m^n; //异或运算后为1的位即为m,n不相同的位

  15. int count = 0;

  16. int len = sizeof(int)*8;


  17. while ( len-- )

  18. {

  19. /* 从低位至高为寻找temp的位中1的个数 */

  20. if ( temp & 0x01 )

  21. {

  22. count++;

  23. }

  24. temp >>= 1; //temp右移一位

  25. }


  26. return count;

  27. }

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

运行结果

转发、点在看就是对小编最大的支持!


博客网站

zhengnianli.github.io


猜你喜欢

C语言每日一练(008)

C语言每日一练(009)

C语言每日一练(010)

C语言每日一练(011)

C语言每日一练(012)



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存