首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET计数比特,1被计算为1,零计数在1之间的序列中。

VB.NET计数比特,1被计算为1,零计数在1之间的序列中。
EN

Stack Overflow用户
提问于 2021-11-04 20:13:39
回答 1查看 69关注 0票数 0

希望计数序列中的位数。

1被计算为1,0按1之间的序列一起计算。

如果你看这张照片

产出应为2,1,5,1,1,3,2,1

这是我的代码,它工作在80%的数字,有时它搞砸了。

代码语言:javascript
复制
dim bitmask() as byte
redim bitmask(15)
bitmask(0) = 0
bitmask(1) = 0
bitmask(2) = 1
bitmask(3) = 0
bitmask(4) = 0
bitmask(5) = 0
bitmask(6) = 0
bitmask(7) = 0
bitmask(8) = 1
bitmask(9) = 1
bitmask(10) = 0
bitmask(11) = 0
bitmask(12) = 0
bitmask(13) = 1
bitmask(14) = 0
bitmask(15) = 1


Public Function GetBitCount() As Byte()
    Dim count As Byte = 0
    Dim bitcounts As New List(Of Byte)
    Dim indexOfNext As Integer = 0
    Dim totalCounted As Integer = 0
    While True
        indexOfNext = Array.IndexOf(bitmask, CByte(1), indexOfNext + 1)

        If indexOfNext > 0 Then
            If indexOfNext - totalCounted = 1 Then
                bitcounts.Add(2)
                bitcounts.Add(1)
            ElseIf indexOfNext - totalCounted > 0 Then
                bitcounts.Add(IIf(totalCounted > 0, indexOfNext - totalCounted, indexOfNext))
            ElseIf indexOfNext - totalCounted > 1 Then
                bitcounts.Add(2)
                bitcounts.Add(1)
            Else
                bitcounts.Add(1)
                bitcounts.Add(1)
            End If
            If totalCounted = 0 Then bitcounts.Add(1)
            totalCounted = indexOfNext + 1
        Else
            Exit While
        End If
    End While
    If totalCounted - 1 > 2 AndAlso totalCounted - 1 < bitmask.Length - 1 Then
        bitcounts.Add(1)
        bitcounts.Add((bitmask.Length - 1) - (totalCounted - 1))
    ElseIf totalCounted - 1 <= 2 AndAlso totalCounted - 1 < bitmask.Length - 1 Then
        bitcounts.Add((bitmask.Length - 1) - (totalCounted - 1))
    Else
        bitcounts.Add(1)
    End If
    If count > 0 Then bitcounts.Add(count)
    Return bitcounts.ToArray()
End Function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-04 21:59:56

解决方案

代码语言:javascript
复制
Public Function GetBitCount() As Byte()
    Dim i As Integer = 0
    Dim count As Byte = 0
    Dim bitcounts As New List(Of Byte)
    For i = 0 To bitmask.Length - 1
        If bitmask(i) = 1 Then
            bitcounts.Add(count)
            count = 0
        End If
        count += 1
    Next
    If count > 0 Then bitcounts.Add(count)
    Return bitcounts.ToArray()
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69845302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档