[英].NET equivalent of Java's Integer.bitCount?
在 .NET Framework 的任何地方是否有類似於 Java 的Integer.bitCount(int)
或Long.bitCount(long)
?
(對於那些不熟悉這些 Java 方法的人)這也稱為:
POPCNT
。)雖然有有很多的實現,以被發現在網絡上,我在想,如果有一個標准庫的實現。
我知道這不在BitArray
、 UInt32
或BitConverter
,但也許某處隱藏了一個版本,例如在加密函數中。
BitVector32
和BitArray
類都沒有這樣的方法,所以我相信框架中確實缺少這種方法。
就個人而言,我認為這些類並沒有真正有用,因為它們錯過了許多自然位操作。 我不確定它們的真正用途是什么。 事實上,它們的用處非常有限。
此功能不在 .NET Framework 或 .NET Standard 中,但在 .NET Core 3.0 和更高版本中,因此包括 .NET 5.0 和更高版本,在System.Numerics.BitOperations
靜態類下,特別是方法
兩者都在 C# 中返回System.Int32
aka int
。
還有其他有用的操作:計數前導零或尾隨零,計算以 2 為底的整數對數,以及執行位旋轉(也稱為循環移位)。
在核心庫中這樣做的最大好處/原因可能是您可以獲得硬件加速而無需鏈接到非托管代碼,並且類文檔證實了這一點:
為內部位操作操作提供實用方法。 這些方法在底層平台上可用時使用硬件內在函數; 否則,他們使用優化的軟件回退。
我知道這是一個非常古老的問題,但對於像我這樣的人來說,至少有一個解決方法可能會有所幫助:
public static int BitCount(int n)
{
var count = 0;
while (n != 0)
{
count++;
n &= (n - 1); //walking through all the bits which are set to one
}
return count;
}
這些方法基於 Hacker's Delight 的算法。 您可以在此處下載它們的 C 代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.