0

符号なし整数引数のバイナリ表現で 1 ビットの数を返す bitCount() という名前の関数を bitcount.c に記述します。識別情報を入力し、完成したプログラムを実行して正確性を確認することを忘れないでください。

 /*
    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 は、入力された 10 進数を 2 進数に変換してから、1 の数をカウントすることになっていますか?

4

1 に答える 1

0

関数への「10 進数」入力はありません。プレーンな (unsignedのようです) 数値が渡されます。それらは、ほとんどの一般的なコンピューターにバイナリで保存されます。

たとえば、次のような値が返されると思います。

  • bitcount(0)-> 0 (0 にはビットが設定されていないため)
  • bitcount(1)-> 1 (1 はバイナリで 1 2であるため)
  • bitcount(2)-> 1 (2 は 2 進数で 10 2なので)
  • bitcount(3)-> 2 (3 は2進数で 11 2であるため)

関数が呼び出されるソースコードで数値がどの基数で指定されているかは関係ありません。プログラムが実行されると、バイナリに変換されます。bitcount(01)(8 進数) またはのように呼び出すことができますが、値がバイナリで格納されていると想定できる をbitcount(0x80)取得しているだけです。unsigned int

の再帰アルゴリズムbitcount(x)は次のとおりです。

  1. x が 0 の場合、0 を返す
  2. x が 1 の場合、1 を返す
  3. bitcount(x mod 2) + bitcount(x / 2) を返す

x疑似コードは、数値が特定の方法 (バイナリであろうとなかろうと) で格納されていることを想定していないことに注意してください。数値自体で機能します。擬似コードのリテラルは 10 進数ですが、それは単なる表記です。

于 2013-02-08T13:42:56.887 に答える