四種方法求乙個整數儲存在記憶體中的二進位制中1的個數

2021-09-26 06:39:14 字數 953 閱讀 4583

(1)

int

num(

int n)

n = n /2;

}return count;

}int

main()

這個**是存在一定問題的。倘若要求-1儲存在記憶體中二進位制1的個數,用該段**列印出來的結果為0,但我們都知道-1在記憶體中是以補碼的形式儲存的,整型的話就有32個1。若將nt num(int n)改為int num(unsigned int n),就可以求了。

(2)

int

num1

(unsigned

int n)

n = n >>1;

}return count;

}int

main()

用這段**的話,移位需要一直移夠32次,但若求像5這樣的數的二進位制中1的個數,僅僅只需要移動3次就夠了,剩下的移位操作都是在做無用功;所以可將其優化為以下**:移完一位後,判斷當前數字是否為0,若是,則結束迴圈,若不是,則繼續移動直至當前數字為0,才結束迴圈。

(3)

int

num2

(unsigned

int n)

n = n >>1;

}return count;

}int

main()

繼續優化後可得到以下**

(4)

int

num3

(unsigned

int n)

return count;

}int

main()

求乙個整數儲存在記憶體中的二進位制中的1的個數

求乙個整數儲存在記憶體中的二進位制中的1的個數 方法1.利用數字遍歷的方式 相除和取模 n,n include include void onenumber int n printf d n count intmain 方法1只能確定正整數中二進位制中1的個數 執行結果 方法2.利用按位操作來實現 ...

C語言之求乙個整數儲存在記憶體中的二進位制中1的個數

求乙個整數儲存在記憶體中的二進位制中1的個數 三種方法 define crt secure no warnings 1 include intmain printf 二進位制中1的個數 d n count return0 define crt secure no warnings 1 include...

建立乙個物件的四種方法

1 定義乙個新的物件 var student1 new object 2 新增屬性 student1.name 張三 student1.age 12 3 取屬性值 a,var namevalue student1.name b.var namevalue student1 name 裡面可是要引起來...