一道和位與操作 相關的趣題

2021-05-22 09:55:16 字數 1184 閱讀 2524

google

的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 ...