題目:請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。
#includeusing namespace std;
int numof1(int n)
flag = flag << 1;
} return count;
}int main()
一.移位運算
1.左移運算子m<00001010<<2=00101000
10001010<<3=01010000
2.右移運算子m>>n:把m右移n位,最右邊n位拋棄。
如果m是無符號數,最左邊補上n個0;如果m是有符號數,用數字的符號位填補n位。
以有符號數字例:
00001010>>2=00000010
10001010>>3=11110001
3.移位運算比乘除運算效率更高:從效率上看,使用移位指令有更高的效率,因為移位指令佔2個機器週期,而乘除法指令佔4個機器週期;從硬體上看,移位對硬體更容易實現。
二.與或運算
從低位開始與或
1001&1110=1000
1001&1=1
三.其他
1.sizeof(int)=sizeof(unsigned int)=4(位元組)
2.計算機中數字用補碼儲存。
3.補碼解決了加減法的問題和兩個0的問題。
1-1=1+(-1)=(0000 0001)原 +(1000 0001)原 =(1000 0010)原=-2
1-1=1+(-1)=(0000 0001)反 +(1111 1110)反 =(1111 1111)反=(1000 0000)原=-0
1-1=1+(-1)=(0000 0001)補 +(1111 1111)補 =(0000 0000)補=(0000 0000)原=0//解決了加減法
-1-127=(-1) + (-127) = (1111 1111)補 + [1000 0001]補 = [1000 0000]補=-128 沒有原碼和反碼能表示//解決了兩個0,可以多表示乙個數
4.int型別的取值範圍:-2^31~2^31-1 十六進製制表示——0x8000 0000~0x7fff ffff
面試題15 二進位制中1的個數
請實現乙個函式,輸入乙個整數,輸出該整數的二進位制表示中1的個數。例如,把9表示成二進位制是1001,有2個是1。因此,如果輸入9,則該哈數輸出2。如果輸入負數,則統計該數字二進位制補碼中的1的個數。先判斷二進位制中最右邊一位是不是1 接著把輸入的整數右移一位,此時原來處於從右邊數起第二位被移到最右...
面試題15 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出改數的二進位制表示中1的個數 常規解法 思路 通過與運算來判斷某乙個是否為1。該數先和1相與,如果結果為1,則第一位為1,然後1左移一位與該數相與,判斷第二位是否為1 以此類推,即可判斷該數的二進位制中有多少個1。int getnumofoneinbinary...
面試題15 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如,把9表示成二進位制是1001,有2位是1。因此,如果輸入9,則該函式輸出2。可能引起死迴圈的解法 先判斷整數二進位制表示中最右邊一位是不是1 接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷是不是...