[問題] 如何快速求得2的某次方

看板C_and_CPP (C/C++)作者 (就是愛希爾)時間13年前 (2013/01/30 13:11), 編輯推噓2(2013)
留言15則, 11人參與, 最新討論串1/1
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

01/30 13:31, , 1F
「當如果是1的話」,實在是太深奧了,看不懂。
01/30 13:31, 1F

01/30 13:44, , 2F
也原PO可以讓您的數學名詞更精確點,這樣比較好討論:)
01/30 13:44, 2F

01/30 13:45, , 3F
除5次還不夠快嗎= =?
01/30 13:45, 3F

01/30 13:52, , 4F
假設是無號整數的話,問題可以看成求出最高非0bit位置
01/30 13:52, 4F

01/30 13:53, , 5F
問題還可以變成Counting Leading 0's
01/30 13:53, 5F

01/30 13:56, , 6F
可以看一下Hacker's Delight sec 5-3 page 99
01/30 13:56, 6F

01/30 13:56, , 7F
gcc : __builtin_clz() msvc : _BitScanReverse()
01/30 13:56, 7F

01/30 14:09, , 8F
你可以一次除4阿 商等於2或1時停下來就好 前面的位數乘以
01/30 14:09, 8F

01/30 14:10, , 9F
2就是答案 當然也可以除以8 16等等.....
01/30 14:10, 9F

01/30 14:19, , 10F
轉成浮點數再取 exponent http://ideone.com/rqRqBx
01/30 14:19, 10F

01/30 15:01, , 11F
位元運算+1
01/30 15:01, 11F

01/30 15:22, , 12F
先轉成2進位,然後看哪一個bit有1這樣不就可以了嗎XD
01/30 15:22, 12F

01/30 19:52, , 14F
何必先轉成2進位,在電腦內本來就是存二進位
01/30 19:52, 14F

01/30 21:04, , 15F
你是要算 uint log2(uint n) 吧? http://ppt.cc/jh5z
01/30 21:04, 15F
文章代碼(AID): #1H2Ajaib (C_and_CPP)
文章代碼(AID): #1H2Ajaib (C_and_CPP)