(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 裡面可是要引起來...