【发布时间】:2014-11-05 23:35:24
【问题描述】:
我已经定义了以下内容:
typdef enum {
none = 0,
alpha = 1,
beta = 2,
delta = 4
gamma = 8
omega = 16,
} Greek;
Greek t = beta | delta | gammax
我希望能够随机选择t 中设置的标志之一。 t 的值可以变化(可以是枚举中的任何值)。
我的一个想法是这样的:
r = 0;
while ( !t & ( 2 << r ) { r = rand(0,4); }
有人有更优雅的想法吗?
如果有帮助,我想在 ObjC 中执行此操作...
【问题讨论】:
-
在这种情况下,您对“更优雅”的看法是什么?我可以想到一个只生成一个随机数但需要多几行代码才能工作的解决方案。
-
另外,根据您想要的“随机”程度,您可以使用内置编译器找到最低或最高设置位:Finding position of 1s efficiently in an bit array。
-
@rmaddy 更优雅,我的意思是不需要while循环。我的例子有点“朝墙上开火,看看有什么棒”。如果
t = delta并且我们从那个随机“集合”(1 个)中挑选,那么随机每次都会错过的机会有五分之五直到它从集合中选择“活动”的一个。 @JoshCaswell 是否只选择最高/最低设置位?
标签: objective-c random enums binary