我有一组选项,一些正交(可以任意组合组合),一些独占(允许只允许一组),并需要选择一组enum
值,以便它们可以按比特组合or
并提取有点位and
.我希望 - or
无效组合是可检测的.
有没有像这样生成的工具enums
?
编辑清晰
我正在寻找能够利用某些标志组合无效以减少使用的位数的事实.我能够检测错误的要求是软的.如果事情被破坏,我不需要能够告诉我们使用了什么.
我正在使用C#,但任何解决方案都应该有用.
一个示例模式是:
0011 00 0101 00 1001 00 0110 00 1010 00 1100 00 0000 01 0000 10
获得6个独占标志和一个2到6位的正交对
快速测试表明,5位给出9个值,6位给出20,...
我知道这样做的最好的通用方法不是一个常规的工具:定义像这样的位标志列表:
FLAG_1 0x00000001 FLAG_2 0x00000002 FLAG_3 0x00000004 FLAG_4 0x00000008 FLAG_5 0x00000010 FLAG_6 0x00000020
它很容易使用,因为数字继续向左移动1,2,4,8模式.
编辑:回应评论.好吧,如果你真的想要一个bitflags与独占枚举的组合,你基本上要做的是将位列表的一部分分割出来作为数字空间.所以你可以取两位0x1和0x2,现在你可以使用这两位代表0-3.就像是:
OPT_1_VAL_1 0x00000000 OPT_1_VAL_2 0x00000001 OPT_1_VAL_3 0x00000002 OPT_1_VAL_4 0x00000003 FLAG_1 0x00000004 FLAG_2 0x00000008 FLAG_3 0x00000010 FLAG_4 0x00000020
您使用的屏蔽逻辑必须更复杂.要查找标志,您可以执行if(settings&FLAG_1),但是如果((settings&OPT_1_VAL_3)== OPT_1_VAL_3)则需要执行选项空间.