vb.net - 如何找到二进制 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 中生成这样的列表?
解决方案
您应该能够使用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())
顺便说一句:这应该在一秒钟内完成,具体取决于您的系统;-)
推荐阅读
- html - PrimeNG 菜单栏角度样式
- bash - 使用 sed 将逗号分隔的列表转换为逗号分隔的列表,并在每个元素周围加上引号
- android - 图像的实时捕获未提供任何结果(ml kit Vision)
- excel - 缺失值替换为下一个可用的值,保留列标题
- c# - 如何使用 C# 中的扩展方法获取嵌套字典?
- javascript - Shiny and rhandsontable - 基于列总和的条件单元格/列格式
- java - 存储库到服务的依赖关系不满足
- python - JSON 中的 Python If 语句
- reactjs - React 中的条件路由
- groovy - 如何在使用 Groovy 附加两个数据集时添加具有某个常数值的新列?