Re: [問題] 如何快速求出最左邊bit為1的位置

看板C_and_CPP作者 (kk)時間15年前 (2010/10/23 14:23), 編輯推噓5(5010)
留言15則, 6人參與, 最新討論串3/3 (看更多)
※ 引述《kok45 (11)》之銘言: : ※ 引述《del680202 (HANA)》之銘言: : : 假設今天我有一個bit 串列 : : N=010010,我想快速求出最左邊的1 : : 也就是010000 : : 如果是最右邊的話 : : 可以用 N XOR (N-1) & N 取得 : : 但是最左邊目前沒什麼概念可以解這問題 : : 有沒有高手可以指點一下 : 不考慮 : 記憶體問題的話 : table lookup 應該蠻快的 可以試試看asm的語法: inline int get_highest_bit_index(int x) { int y; asm ( "\tbsr %1, %0\n" : "=r"(x) : "r" (y)); return y; } 是用bsr指令做的,也就是find bit set reverse -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.224.138

10/23 14:33, , 2F
VC的看起來比較習慣
10/23 14:33, 2F

10/23 14:40, , 3F
噢噢 我是在QT上寫的@@"
10/23 14:40, 3F

10/23 14:47, , 4F
用rcl這個指令如何?檢查carry flag
10/23 14:47, 4F

10/23 17:17, , 5F
這傢伙原來躲在 0F 裡面...難怪之前沒看過 @_@
10/23 17:17, 5F

10/23 17:17, , 6F
asm裡x和y位置要對調吧 y才是output
10/23 17:17, 6F

10/23 17:18, , 7F
用 rcl 還得自己寫迴圈 bsr 就我看到的資料是直接有值
10/23 17:18, 7F

10/23 17:18, , 8F
這是 AT&T 語法所以是反過來的 XD
10/23 17:18, 8F

10/23 17:21, , 9F
喔喔orz
10/23 17:21, 9F

10/24 00:29, , 10F
不過我也還在找看看有沒有更快的辦法
10/24 00:29, 10F

10/24 00:39, , 11F
感覺CPU如果提供這個bsr指令,表示常需要用到,而之後沒有
10/24 00:39, 11F

10/24 00:40, , 12F
提供其他替代指令,就表示暫時沒有更好方案了。
10/24 00:40, 12F

10/24 00:41, , 13F
我們自己高階語言去取,怎樣都沒CPU用硬體去算來得快吧
10/24 00:41, 13F

10/24 01:22, , 14F
原來如此..
10/24 01:22, 14F

10/24 02:04, , 15F
最右邊的 bit ,只要 x & -x 即可
10/24 02:04, 15F
文章代碼(AID): #1CmdzBW1 (C_and_CPP)
文章代碼(AID): #1CmdzBW1 (C_and_CPP)