在
的toplanguage
論壇中看到一道題目,和位與操作
(&)相關。
先簡單回顧一下什麼叫做位與操作符:
位與操作(
&)需要兩個整型運算元,在每個位的位置,如果兩個運算元對應的位都為
1,則操作結果中該位為
1,否則為0。
unsigned char b1 = 0145; 表達為二進位制,結果如下
0 1 1 0 0 1 0 1
unsigned char b2 = 0257; 表達為二進位制,結果如下
1 0 1 0 1 1 1 1
那麼,unsigned char result = b1 & b2; 表達為二進位制,結果如下
0 0 1 0 0 1 0 1
然後看題:
int test(int n)
return ncount; }求
test
(9999)
最後解答:
「n = n & (n - 1)」
說明這其實就是乙個位於操作的題目。問題是
9999
到底等於二進位制的多少,這個需要計算出來麼?常規解法是計算出來然後按位與,但是其實是也可以不用計算出來,比如論壇上有網友
doyle
解答如下:「
假設9999
的二進位制表達為
*********x...***1,
顯然最後一位是
1(因為是奇數
) 則可知
9998
二進位制表達為
*********x...***0,
顯然最後一位是
0(因為是偶數
) 顯然
,9999&9998=>9998(*********x...***0)
然後是9998&9997=>
我不知道是多少,但是
,肯定是
*********x...xx00
繼續下去,就是
*********x...***0
和*********x...***(
反)0(反)
相與所以最後
n = 9999
表達為2
進製時需要多少位?於是
取整(log(9999,2))=13,
所以n=14 「
非常流暢的解答!
一道遊戲設計趣題
前兩天好 乘坐飛機去外地開年會,估計公司怕他們坐飛機實在太無聊,給他們搞了幾道思考題。在此我分享一下這道題目,以及答題思路。請先看題目內容。我直接上了,真的懶得打字呀 首先想到的是最直接的方法,找出各種分類,並累加各種分類模式的總數即可。對於5種兵種,其形式可分為 1 1 1 1 1 陣容為一樣乙個...
作業系統的一道題
如圖所示,系統中有三個程序get pro和put,共用兩個緩衝區buf1和buf2。假設buf1中最多可放11個資訊,現已放入了兩個資訊 buf2最多可放5個資訊。get程序負責不斷地將輸入資訊送入buf1中,pro程序負責從buf1中取出資訊進行處理,並將處理結果送到buf2中,put程序負責從b...
一道題跟java多型和繼承相關
class base public void tellname public void printname public class dervied extends base public void tellname public void printname public static void ...