看板 C_and_CPP 關於我們 聯絡資訊
2的5次方等於32 一般都是用除法去求得5這個數字 32/2 = 16 16/2 = 8 8/2 = 4 4/2 = 2 2/2 = 1 .... 還有其它方式可以更快速求出來嗎? 謝啦 有想過用最左邊開始位移去計算 不過當如果是1的話,變的計算就很多次 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.143.163
MOONRAKER:「當如果是1的話」,實在是太深奧了,看不懂。 01/30 13:31
proach:也原PO可以讓您的數學名詞更精確點,這樣比較好討論:) 01/30 13:44
CaptainH:除5次還不夠快嗎= =? 01/30 13:45
iamstudent:假設是無號整數的話,問題可以看成求出最高非0bit位置 01/30 13:52
iamstudent:問題還可以變成Counting Leading 0's 01/30 13:53
iamstudent:可以看一下Hacker's Delight sec 5-3 page 99 01/30 13:56
linotwo:gcc : __builtin_clz() msvc : _BitScanReverse() 01/30 13:56
abcsimps:你可以一次除4阿 商等於2或1時停下來就好 前面的位數乘以 01/30 14:09
abcsimps:2就是答案 當然也可以除以8 16等等..... 01/30 14:10
linotwo:轉成浮點數再取 exponent http://ideone.com/rqRqBx 01/30 14:19
a27417332:位元運算+1 01/30 15:01
villix:先轉成2進位,然後看哪一個bit有1這樣不就可以了嗎XD 01/30 15:22
diabloevagto:何必先轉成2進位,在電腦內本來就是存二進位 01/30 19:52
EdisonX:你是要算 uint log2(uint n) 吧? http://ppt.cc/jh5z 01/30 21:04