0

在 bitcount.c 中编写一个名为 bitCount() 的函数,该函数返回其无符号整数参数的二进制表示形式的 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 的个数?

4

1 回答 1

0

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

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

  • bitcount(0)-> 0(因为 0 没有设置位)
  • bitcount(1)-> 1(因为 1在二进制中是 1 2 )
  • bitcount(2)-> 1(因为2在二进制中是 10 2 )
  • bitcount(3)-> 2(因为 3在二进制中是 11 2 )

在调用函数的源代码中给出的数字的基数无关紧要,一旦程序运行,它将被转换为二进制。您可以将其称为bitcount(01)(octal) 或bitcount(0x80),它仍然只是得到一个unsigned int可以假定其值存储在二进制中的值。

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

  1. 如果 x 为 0,则返回 0
  2. 如果 x 为 1,则返回 1
  3. 返回 bitcount(x mod 2) + bitcount(x / 2)

请注意,伪代码不假定数字以任何特定x方式存储(无论是二进制还是其他),它适用于数字本身。伪代码中的文字是十进制的,但这只是符号。

于 2013-02-08T13:42:56.887 回答