簡體   English   中英

解釋1位計數

[英]interpreting 1 bit counting

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

該函數沒有“十進制”輸入,它是通過普通數字(似乎是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) (八進制)或bitcount(0x80)這樣稱呼它,它仍然只是獲得一個unsigned int其值可以假定存儲在二進制中。

bitcount(x)遞歸算法如下:

  1. 如果x為0,則傳回0
  2. 如果x為1,則返回1
  3. 返回位數(x mod 2)+位數(x / 2)

請注意,偽代碼不假定數字x以任何特定方式存儲 (無論是二進制形式還是其他形式),而是對數字本身起作用。 偽代碼中的文字是十進制的,但這只是符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM