寫乙個函式返回引數二進位制中 1 的個數

2021-08-17 22:51:53 字數 2940 閱讀 3988

】通過c語言程式將

十進位制數轉化成二進位制數,然後求出二進位制數中1的個數。

下面用三種方法來實現

。來方法一:除2取餘法。對一十進位制數,用2輾轉相除至結果為1,將餘數和最後的1從下向上倒序寫就是對應的二進位制。

例如:十進位制數302轉化成二進位制。

302/2=151餘0;151/2=75餘1;75/2=37餘1;37/2=18餘1;18/2=9餘0;9/2=4餘1;4/2=2餘0;2/2=1餘0,故二進位制為100101110。(二進位制中首位是符號位,正數加1,負數加0)

此方法的缺點是只可以對正數運算,一旦輸入負數結果出現錯誤。

**如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

#include

intmain()

printf("count=%d",count);

return0;

}

方法二:移位法。移位法分為左移和右移兩種情況,左移時數的右邊都補0;右移時正數左邊補0,負數左邊補1。c語言中「<<」為左移運算子,「>>」為右移運算子。移位法雖可以正負數進行轉換,但它的缺點是效率低下,對於-1這個數需要向右移位32次才能找到對應的二進位制數。下面程式用了「右移法」實現十進位製到二進位制的轉換。

**如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include

intmain()

printf("count=%d",count);

return0;

}

方法三:按位「與」法,即x=x&(x-1)。此方法不僅可以對正負數進行十進位製到二進位制的轉化,而且效率高。對於整型數在存放位址時,它以32位或64位的補碼形式存放。x=x&(x-1)還可以判斷某數是否為2的n次方,當結果為0時,則這個數就是2的n次方。

下面對十進位制數15進行轉換分析:

15的八位二進位制數補碼為0000 1111.

第一次與運算             x                        0000 1111

x-1                       0000 1110

x&(x-1)                0000 1110---14

第二次與運算             x                        0000 1110

x-1                       0000 1101

x&(x-1)                 0000 1100---12

第三次與運算              x                        0000 1100

x-1                       0000 1011

x&(x-1)                 0000 1000---8

第四次與運算               x                        0000 1000

x-1                        0000 0111

x&(x-1)                 0000 0000---0

進行4次與運算後結果為0,則二進位制中1的個數就為4。

**如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

#include

intmain()

printf("count=%d",count);

return0;

}

要理解這篇文章最主要的就是要掌握

& 按位與, | 按位或 , ^ 按位異或

1 & 1 = 1, 1 | 1 = 1, 1 ^ 1 = 0

1 & 0 = 0, 1 | 0 = 1, 1 ^ 0 = 1

0 & 1 = 0, 0 | 1 = 1, 0 ^ 1 = 1

0 & 0 = 0, 0 | 0 = 0, 0 ^ 0 = 0

寫乙個函式返回引數二進位制中1的個數

寫乙個函式返回引數二進位制中1的個數 分析 1 輸入乙個數 2 判斷它是否為0。3 如果不為0,就對它進行模2取餘,模2的過程就相當於把這個數向右移除了一位,如果餘數為1,則證明移除的這一位為1,就將其記錄下來。如果餘數為0,就證明移除的這一位為0,就不記錄。4 經過第3步以後,對這個數進行除2取整...

寫乙個函式返回引數二進位制中1的個數

寫乙個函式返回引數二進位制中1的個數 15 00001111 方法一 include include int main printf d n count system pause return0 此方法不能計算 0 的情況 2.方法二 include include int main printf ...

寫乙個函式返回引數二進位制中 1 的個數

方法一 注意 1 這種方法是採取按位於,即讓索要判斷的數和1 與,可以判斷最後一位是0還是1,然後每判斷一次 向右移動一位再判斷下一位,以此類推迴圈32次,即可知道這個數的每一位情況 include int main num num 1 沒判斷完一位,這個數向右移動1位,再判斷下一位 printf ...