0

什麼是執行以下按位轉換的最快方式?如何左移最不重要的零點?

X..XA01..1 // input 
X..X011..1 // output 

因此,至少顯著零位必須被設置爲一個,並且離開它的位(無論它是0或1)必須被設置成零,這就是它。

回答

3

獲取最右邊的零很簡單:~x & (x + 1)

利用這一點,你可以在幾個簡單的步驟做:(未測試)

uint32_t rightmost_zero = ~x & (x + 1); 
uint32_t result = (x | rightmost_zero) & ~(rightmost_zero << 1); 

有可能是一個簡單/更快的方法。