這個 nextPowerOfTwo 函式的數學原理是什麼?

時間 2021-06-02 15:31:20

1樓:鍾宇騰

實際上,它的目的是要把``v - 1``的最高位為1的位開始,把它及最低位之間的所有位全都變成1。

直接看例子吧。比如乙個數5 (101)

v = 0b101;

v --; // v = 0b0000 0100;

v |= v >> 1; // v = 0b0000 0110;

v |= v >> 2; // v = 0b0000 0111;

// ... 下面的就不用寫了

v ++; // v = 0b0000 1000 就是要的答案

從上面的例子就可以看出這個演算法的目的,就是要不斷的複製已經置為1的最高位。因為第一次右移1位,就把最高位複製了1次;然後第二次就要複製最高的2個位,所以右移2位;下一次就要複製4個位,所以右移4位。如此類推。

因為uint是32位,所以只要最後做到16就可以了。

為什麼要先把``v``減1?如果``v``本身已經是答案的話,執行此演算法就會得到``v * 2``,所以先減1。

如果``v``是0,那麼它減1就是-1,或者說是UINT_MAX,是全1的乙個數,最後執行完的結果還是0。

2樓:

有意思nextPowerOfTwo 返回的是 min 2^k s.t. 2^k>v-1

程式的步驟是找到 v-1 的最高位1,令其為第m位,返回 2^(m+1)

為使流程清晰,每一步我們都用新變數表示,v0=v第一步即 v1=v0-1

後面幾步,將 v1 的最高位1(第m位)的所有低位都置為1,即 v6=2^(m+1) -1

最後返回 v7=v6+1=2^(m+1)

The food is delicious 這個句子中,主語是The food 還是food

x心儀物語 The food is delicious 要知道這個句子的主語,劃分句子成分可以幫助你看個明白 The food主語 is謂語 delicious表語 可見,句子主語就是 The food 而不是單獨的food.這是因為,定冠詞The 不單獨使用,需要與名詞,形容詞等詞搭配使用。 楠木...

「聽話」這個這個詞是褒義還是貶義?

阿酒 有些無聊碼一下首答 語境不同含義也就不同了。常見的應該是長輩用這個詞來形容小孩子,這時候的意思是指乖巧 懂事,屬於褒義 也有瞎聽的時候,比如許多人吐槽的 媽寶男 這種就是指這個人沒有主見 盲從錯誤的了,自然就是貶義。不過我覺得糾結這個詞是什麼性質完全沒有必要 就算人家是用來誇你,也不代表就是對...

請問下這個這個徵信是不是黑了

長沙勇哥 座標長沙,首先告訴你,你的徵信不算黑。幫你分析一下,從下往上看。先看個人查詢。你在去年9月17日和今年2月5日去櫃員機上打過徵信,打徵信幹啥?肯定不是買房,應該是找中介貸款。只是沒貸下來。同時你申請了五次信用卡,光招行就申請了兩次。但都沒成功。再往上看,你總共借了17筆網貸,有16筆己經結...