如何查找二进制16位数的每个组合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查找二进制16位数的每个组合相关的知识,希望对你有一定的参考价值。
我的程序中有16个不同的选项,我有一个16个字符的变量,根据所选的选项填充1或0(0000000000000000表示没有选择,0010101010000101表示选项3,5,7,9,14和16已选中,1111111111111111表示已选择所有内容。)
当我运行我的程序时,代码看起来(使用if语句)为16位数字的指定字符中的1,如果有一个那么它运行该选项的代码,否则它跳过它..
例如,选项3看起来也看第3个字符(0010000000000000)是否为1,如果它是运行代码。
现在我要做的是生成一个可能的每个不同组合的列表,这样我就可以为它创建一个选项来循环并运行每个可能的选项:
0000000000000001 0000000000000010 0000000000000011 ... 1111111111111100 1111111111111110 1111111111111111
我试过这个,但我认为运行jaja可能需要几年时间:
Dim binString As String
Dim binNUM As Decimal =“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个chararcters的行(因为最后一个字符将是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())
BTW:这应该在一秒钟内完成,具体取决于您的系统;-)
使用enum
创建一个FlagAttributes
,它允许您执行列出的关键功能。这是一个在我正在进行的小项目中设置它的示例:
<FlagsAttribute>
Public Enum MyFlags As Integer
None = 0
One = 1
Two = 2
Three = 4
Four = 8
Five = 16
Recon = 32
Saboteur = 64
Mine = 128
Headquarters = 256
End Enum
EG
Dim temp as MyFlags
Dim doesIt as Boolean
temp = MyFlags.One
doesIt = temp.HasFlag(MyFlags.Two)
temp = temp OR MyFlags.Three
'etc.
真正的优势是如何打印出来,如果你想要的东西不是0,1,而且更加人性化。
以上是关于如何查找二进制16位数的每个组合的主要内容,如果未能解决你的问题,请参考以下文章