LeadingZeroCountメソッドTrailingZeroCountメソッドは、1のビットに先行/後続する0のビットの数(最上位/最下位ビットから見て0の桁が連続する数)を計上します。 x86 LZCNT/TZCNT命令に類似する演算を行います。

LeadingZeroCount・TrailingZeroCountメソッドは、uint/UInteger, ulong/ULongの整数型のみに対して定義されています。 なお、結果はint/Integerで返されます。

BitOperations.LeadingZeroCount/TrailingZeroCountメソッドで先行/後続する0のビットの数を計上する .NET Core 3.0
Imports System
Imports System.Numerics

Module Sample
  Sub Main()
    ' BitOperations.LeadingZeroCount/TrailingZeroCountメソッドはUInteger/ULongに対してのみ使用できる
    Dim val As UInteger = &B_0000_0000_0000_0001_1000_0000_0000_0000UI

    ' BitOperations.LeadingZeroCountで最上位ビットから連続する0のビットの数を求める
    Dim lzcnt As Integer = BitOperations.LeadingZeroCount(val)

    ' BitOperations.TrailingZeroCountで最下位ビットより連続する0のビットの数を求める
    Dim tzcnt As Integer = BitOperations.TrailingZeroCount(val)

    For Each amount As Integer In New Integer() {0, 1, 2, 29, 30, 31}
      val = &B_1UI << amount
      lzcnt = BitOperations.LeadingZeroCount(val)

      Console.WriteLine($"LeadingZeroCount({val.ToBinary()}) = {lzcnt}")
    Next
    Console.WriteLine()

    For Each amount As Integer In New Integer() {0, 1, 2, 29, 30, 31}
      val = &B_1UI << amount
      tzcnt = BitOperations.TrailingZeroCount(val)

      Console.WriteLine($"TrailingZeroCount({val.ToBinary()}) = {tzcnt}")
    Next
    Console.WriteLine()
  End Sub

#Region "数値を二進数表記で文字列化するためのメソッド"
  <System.Runtime.CompilerServices.Extension> _
  Function ToBinary(ByVal number As UInteger) As String
    Return "&B_" + Convert.ToString(number, 2).PadLeft(8 * Len(number), "0"c)
  End Function
#End Region
End Module
実行結果
LeadingZeroCount(&B_00000000000000000000000000000001) = 31
LeadingZeroCount(&B_00000000000000000000000000000010) = 30
LeadingZeroCount(&B_00000000000000000000000000000100) = 29
LeadingZeroCount(&B_00100000000000000000000000000000) = 2
LeadingZeroCount(&B_01000000000000000000000000000000) = 1
LeadingZeroCount(&B_10000000000000000000000000000000) = 0

TrailingZeroCount(&B_00000000000000000000000000000001) = 0
TrailingZeroCount(&B_00000000000000000000000000000010) = 1
TrailingZeroCount(&B_00000000000000000000000000000100) = 2
TrailingZeroCount(&B_00100000000000000000000000000000) = 29
TrailingZeroCount(&B_01000000000000000000000000000000) = 30
TrailingZeroCount(&B_10000000000000000000000000000000) = 31