位操作技巧面試題

2021-05-17 21:57:17 字數 1254 閱讀 4479

1,統計乙個整數二進位制式『1』的個數:

假如乙個數n=0x1110 0010,那麼n - 1 = 0x1110 0001, 也就是把最右邊的那個1變為0,然後左邊的都變成1

如果讓他們「與」運算的話,就等於把數n的最右邊的1變為0,其餘的位不變。這樣迴圈m次(m位1的個數)就可以把n變成0,此時也就可以統計出1的個數了。

int numones(int number)

return cnt;

}2.、給定乙個32bit的數值,如果輸出位元位反轉後的值,如對於4bit的二進位制值1011,翻轉後為1101。要求複雜度o(lgn),n 為位元位數

這道題主要是有時間複雜度的限制,即lgn次,也就是說32bit你只能運算5次就要得出結果出來。

int getinverse(int source)

return target;

}這個演算法時間複雜度位o(n).不符合題目要求。

其實我們可以想想,有32bit,肯定要運用分治的方法

第1次:我們可以先對第0,1位,讓他們互換,(2,3), (4,5),。。。,(30,31)這些對調位置如:

0x1001 0001 ==> 0x 0110 0010

第2次:可以對(0,1,2,3),(4,5,6,7),。。。,(28,29,30,31),如:

0x 0110 0010 ==> 0x 10011000

第3次:對(0,1,2,3,4,5,6,7)。。。,讓他們對調位置

第4次(0,1,2,。。。,15)

第5次(0,。。。,31)結束.

現在要解決怎樣處理讓第i位和第i+1位對調,像(0,1)

可以這樣完成; y = 0x55555555 二進位制位:0x0101 0101 0101 0101 0101 0101 0101 0101

x = (((x >> 1) & y) | ((x & y) << 1));

現在來解釋一下這個操作:((x>>1)&y) 其實就是先把x右移一位,在和y做「與」運算,得出的結果就是取出了x右移一位後所有的第0,2,4,6,8,...., 30位的數,因為這裡y在這位上是1其他位為0,也就是原來x的第1,3,5,7,。。。

31位數。

而:(x & y) << 1 是取出x的第1,3,5,7,。。。,31位,然後把它左移,

最後在把他們「或」運算,這樣就達到了(0,1),(2,3),。。。,位對調的效果了。

後面的情況類似,所以最終**是這樣的:

unsigned int reverse_32bit( unsigned int x)

求職應聘面試技巧面試題

問題6 你認為你工作中的哪些方面是至關重要的?答 妥協和達成目標!妥協的目的就是為了達成目標。問題7 你的職位同你的部門或公司的整體目標有什麼關係?答 過去我的崗位是運維主任,我帶領部門保障系統執行,是為了實現公司的總目標 使裝置零故障,使用者零抱怨,使用者更滿意 問題8 你為什麼找工作?答 第一原...

財務面試題和技巧

面試必答題一 你日常都幹些什麼?財務部門內部具體如何分工的?評 這個題目不僅要回答好,而且要回答得有層次 磊說的 否則給對方留下你簡歷是否真實,是否胡謅的印象。首先我說下我們部門人員情況,包括我一共五個人,下面有乙個出納,負責日常現金 銀行收支業務和現金 銀行日記帳的管理 我們財務帳有三個模組,總帳...

壓力面試題及解答技巧

1 告訴我,你最大的弱點是什麼?回答這種問題的秘訣在於不接受這種否定暗示。不要否認你有缺點,沒人會相信世界上有完人 相反,你應該承認乙個微不足道的弱點或乙個小小的缺點,然後再說那都已經成為過去了,表明自己是怎樣克服這個缺點的。2 你認為自己的哪項技能需要加強?麻煩又來了,你不可能宣稱自己無所不能,但...