当前位置:  开发笔记 > 编程语言 > 正文

如何选择bitflag值?

如何解决《如何选择bitflag值?》经验,为你挑选了1个好方法。

我有一组选项,一些正交(可以任意组合组合),一些独占(允许只允许一组),并需要选择一组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,...



1> chaos..:

我知道这样做的最好的通用方法不是一个常规的工具:定义像这样的位标志列表:

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)则需要执行选项空间.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有