解释1位计数

时间:2013-02-08 13:40:03

标签: binary

在bitcount.c中编写一个名为bitCount()的函数,该函数返回1中的1位数 其无符号整数参数的二进制表示。记得填写身份证明 信息并运行完成的程序以验证正确性。

 /*
    Name:
    Lab section time:
  */
  #include <stdio.h>
  int bitCount (unsigned int n);
  int main ( ) {
    printf ("# 1-bits in base 2 representation of %u = %d, should be 0\n",
      0, bitCount (0));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 1\n",
      1, bitCount (1));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 16\n",
      2863311530u, bitCount (2863311530u));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 1\n",
      536870912, bitCount (536870912));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 32\n",
      4294967295u, bitCount (4294967295u));
    return 0;
  }
  int bitCount (unsigned int n) {
    /* your code here */
  }

有人可以帮我理解究竟是什么问题吗? bitCount是否应该将输入的十进制转换为二进制,然后计算1的数量?

1 个答案:

答案 0 :(得分:0)

该函数没有“十进制”输入,它正在传递普通(unsigned,似乎)数字。它们将以二进制形式存储在大多数典型的计算机上。

我想它会返回这些值,例如:

  • bitcount(0) - &gt; 0(因为0没有设置位)
  • bitcount(1) - &gt; 1(因为1是1 2 二进制)
  • bitcount(2) - &gt; 1(因为2是10 2 二进制)
  • bitcount(3) - &gt; 2(因为3是11 2 二进制)

在调用函数的源代码中给出的数字的基数并不重要,一旦程序运行,它将被转换为二进制。你可以像bitcount(01)(八进制)或bitcount(0x80)那样调用它,它仍然只是得到一个unsigned int,其值可以假设以二进制形式存储。

bitcount(x)的递归算法就是这样:

  1. 如果x为0,则返回0
  2. 如果x为1,则返回1
  3. 返回bitcount(x mod 2)+ bitcount(x / 2)
  4. 请注意,伪代码不会以任何特定方式(无论是二进制还是其他方式)假设数字x 存储,它对数字本身起作用。伪代码中的文字是十进制的,但这只是符号。