0
什麼是執行以下按位轉換的最快方式?如何左移最不重要的零點?
X..XA01..1 // input
X..X011..1 // output
因此,至少顯著零位必須被設置爲一個,並且離開它的位(無論它是0或1)必須被設置成零,這就是它。
什麼是執行以下按位轉換的最快方式?如何左移最不重要的零點?
X..XA01..1 // input
X..X011..1 // output
因此,至少顯著零位必須被設置爲一個,並且離開它的位(無論它是0或1)必須被設置成零,這就是它。
獲取最右邊的零很簡單:~x & (x + 1)
利用這一點,你可以在幾個簡單的步驟做:(未測試)
uint32_t rightmost_zero = ~x & (x + 1);
uint32_t result = (x | rightmost_zero) & ~(rightmost_zero << 1);
有可能是一個簡單/更快的方法。