面試題15 二進位制中1的個數

2021-09-24 04:18:39 字數 1111 閱讀 2647

題目:請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中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 接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷是不是...