簡體   English   中英

需要幫助了解代碼以對設置為1的位進行計數

[英]Need help understanding code to count bits set to 1

我遇到了一個StackOverflow答案 ,該答案提供了以下代碼來有效地計算32位int中設置為1的位數:

int NumberOfSetBits(int i)
{
    i = i - ((i >> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

但是我在理解這一點上有很多問題。 我找不到正確解釋的鏈接。 任何人都可以在這里幫助我理解這段代碼,或者提供一個可能更有用的鏈接嗎?

有點間接的回答:亨利·沃倫(Henry Warren)所著的《哈克的喜悅》(Hacker's Delight)一書很好地提到了像這樣的程序(以及其他數百種程序)如何工作。 我強烈推薦它-它屬於每個程序員的書架。 http://www.amazon.com/Hackers-Delight-Henry-S-Warren/dp/0201914654

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM