contributed by JoshuaLee032190
next_pow2
,我們可以知道這個題目要找出當前整數的下一個2 的冪整數。x |= x >> 1
,而且AAAA
的下一行為 16,由此我們可以推測 AAAA
為 8BBBB
為 32CCCC
就要從前面想了,前面的意思為把這個整數的某一個位元往右全部填滿 1,那在全部都是1的狀況,我們只需要 + 1
即可得出最終的結果我覺得前面右移做了七次有點多此一舉,而測試後,其實可以把code 改成以下的狀況達到同樣的結果
grep -r "roundup" *
找出了 pci.h20
的數字代表了 1mb 的大小所以先取 max
提示: 可執行 gcc -O2 -std=c99 -S next_pow2.c 並觀察產生的 > next_pow2.s 檔案,確認 bsrq 指令 (表示 “Bit Scan Reverse”)
輸入
,的二進位連接起來的數字ans = (i | (EEEE)) & M
可知,len
為往左移動的距離len
才會需要 + 1
,此情況為:AND
運算得到 0 的狀況DDDD
很明顯就是 i & (i - 1)ans
中,可想而知 EEEE
為 ans << len
,如此一來就可以把運算後的數字放入當前空下來的位元is_pattern
主要是在看輸入的無號整數的編碼是否存在特定樣式1000000000000000
做and,當位元還沒有被清空時,只要中間的連續1斷開則回傳false
後面的function 則是找出這個pattern 會發生的事情
EEEE
為 -x
FFFF
為 x