如何用十进制数测试一下

问题描述 投票:2回答:4

我有一组十进制数。我需要检查每个中是否设置了特定位。如果该位置位,我需要返回1,否则返回0。 我正在寻找一种简单快捷的方法。 比如说,我正在检查是否设置了第三位。我可以做(编号AND(2 ^ 2)),如果该位置位则返回4,否则返回0.如何让它返回1而不是4? 谢谢!

vb.net bitwise-operators boolean-logic boolean-operations
4个回答
1
投票
if ((number AND (2^bitnumber) <> 0) then return 1 else return 0 end if

如果您可以将返回类型更改为布尔值,那么这将更加优雅

return ((number AND (2^bitnumber)) <> 0)

1
投票

虽然划分解决方案很简单,但我认为位移操作会更有效率。不过,你必须测试它才能确定。例如,如果您使用的是基于1的位索引,则可以执行以下操作:

Dim oneOrZero As Integer = (k And 2 ^ (n - 1)) >> (n - 1)

(其中k是数字,n是位索引)。当然,如果您使用基于0的位索引,您可以这样做:

Dim oneOrZero As Integer = (k And 2 ^ n) >> n

0
投票

对不起,伙计们,我今天太慢了。 要测试十进制数“k”中的位数“n”: (k AND 2 ^(n-1))/(2 ^(n-1)) 如果该位置位则返回1,否则返回0。 ================================================== === 大家好! 我将三个提出的解决方案的性能与从零开始的索引进行了比较,结果如下: “位移解决方案” - 8.31秒 “如果...那么解决方案” - 8.44秒 “分裂解决方案” - 9.41秒 时间是连续四次运行的平均值。 令我惊讶的是,第二种解决方案胜过第三种解决方案。 但是,在我以这种方式修改“分区解决方案”之后: p = 2 ^ n:oneOrZero =(k和p)/ p 它开始在7.48秒内运行。 因此,这是所提出的解决方案中最快的(尽管Keith说:-)。 谢谢大家的帮助!


0
投票

我真的不知道它是否可以帮助任何人超过上述,但是,我们走了。

当我需要快速检查数字时,我直接比较该位的十进制值。

我的意思是,如果我需要看到第6位打开(32),我检查它的十进制值,如下所示:

if x and 32 = 32 then "the bit is ON"

例如,尝试使用32,4和2 ...以及其他位检查38。您将看到仅打开实际位。

我希望它可以提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.