考慮Bit Twiddling Hacks網站的this link。 爲了計算尾隨位時,使用下面的算法:並行計算右側連續的零位(尾隨):解釋?
unsigned int v; // 32-bit word input to count zero bits on right
unsigned int c = 32; // c will be the number of zero bits on the right
v &= -signed(v); /* THIS LINE */
if (v) c--;
if (v & 0x0000FFFF) c -= 16;
if (v & 0x00FF00FF) c -= 8;
if (v & 0x0F0F0F0F) c -= 4;
if (v & 0x33333333) c -= 2;
if (v & 0x55555555) c -= 1;
有人能解釋我標記爲/* THIS LINE */
線的作用,更重要的是它可以只使用位操作,以避免使用signed()
?
編輯:如何通過算術/邏輯/位運算來代替signed()
?
* signed *只是一種類型轉換,它並不代表任何實際的彙編指令。 –
沒有在本世紀生產的任何CPU,沒有。 – MSalters