2013-02-08 43 views
0

在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的數目?

+0

在[Bit Twiddling Hacks](http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive)頁面列出了大量的方法。 – 2013-02-08 13:44:07

回答

0

該函數沒有「十進制」輸入,它被傳遞爲純數字(unsigned,看來)數字。它們將在大多數典型計算機上以二進制形式存儲。

我想這將返回這些值,例如:

  • bitcount(0) - > 0(由於0沒有任何位設置)
  • bitcount(1) - > 1(因爲圖1是1 2二進制
  • bitcount(2) - > 1(因爲2是10 2二進制
  • bitcount(3) - > 2(因爲圖3是11 in binary)

在調用函數的源代碼中給出數字的基數並不重要,在調用該函數的源代碼中給出的數字將在程序運行後轉換爲二進制。你可以稱它爲bitcount(01)(八進制)或bitcount(0x80),它仍然只是得到一個unsigned int,它的值可以假定爲以二進制形式存儲。

bitcount(x)遞歸算法是這樣:

  1. 如果x爲0,則返回0
  2. 如果x爲1,返回1個
  3. 返回比特計數(在x mod 2)+比特計數(X/2)

注意,僞代碼不會假定數量x存儲以任何具體方式(無論是二進制或whatev呃),它對數字本身有效。僞代碼中的文字是十進制的,但這只是表示法。

+0

那麼我如何訪問二進制數字?像它通過十進制值,我怎麼得到二進制值? – user2054534 2013-02-08 20:30:13