首页 > 解决方案 > 如何找到二进制 16 位数字的每个组合

问题描述

我的程序中有 16 个不同的选项,我有一个 16 个字符的变量,根据所选的选项填充 1 或 0(0000000000000000 表示未选择任何内容,0010101010000101 表示选项 3、5、7、9、14 和 16已选中,1111111111111111 表示已选中所有内容。)

当我运行我的程序时,代码会(使用 if 语句)在 16 位数字的指定字符中查找 1,如果有,则运行该选项的代码,否则跳过它。

例如,选项 3 看起来太查看第 3 个字符(0010000000000000)是否为 1,如果是则运行代码。

现在我要做的是生成一个可能的每个不同组合的列表,这样我就可以为它创建一个选项来循环并运行每个可能的选项:

0000000000000001
0000000000000010
0000000000000011
...
111111111111100
1111111111111110
1111111111111111

我已经尝试过了,但我认为运行 jaja 可能需要几年时间:

    Dim binString As String

将 binNUM 调暗为十进制 = "0.0000000000000001"

    Do Until binNUM = 0.11111111111111111
        binString = binNUM.ToString
        If binString.Contains(1) Then
            If binString.Contains(2) Or binString.Contains(3) Or binString.Contains(4) Or binString.Contains(5) Or binString.Contains(6) Or binString.Contains(7) Or binString.Contains(8) Or binString.Contains(9) Then

            Else
                Debug.Print(binNUM)
            End If
        End If

        binNUM = binNUM + 0.0000000000000001

上面的代码完成后,我将获取输出列表并删除任何“0”实例。然后任何少于 16 个字符的行(因为最后一个字符是 0 并且不显示)我会添加一个 0 直到有 16 个字符。我知道这一点可能很愚蠢,但据我所知

有没有更快的方法可以在 VB.net 中生成这样的列表?

标签: vb.net

解决方案


您应该能够使用Convert.ToString以下方法获取列表:

Dim sb As New System.Text.StringBuilder

For i As Integer = 0 To 65535
    sb.AppendLine(Convert.ToString(i, 2).PadLeft(16, "0"c))
Next

Debug.Print(sb.ToString())

顺便说一句:这应该在一秒钟内完成,具体取决于您的系统;-)


推荐阅读