【问题标题】:interpreting 1 bit counting解释 1 位计数
【发布时间】:2013-02-08 13:40:02
【问题描述】:

在 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 的个数?

【问题讨论】:

标签: binary


【解决方案1】:

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

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

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

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

bitcount(x) 的递归算法如下:

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

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

【讨论】:

  • 那么我如何访问二进制数字?就像它通过十进制值一样,我如何获得二进制值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2015-06-22
  • 2012-11-12
  • 2012-12-16
  • 2017-10-21
相关资源
最近更新 更多