标签: bitflags

如何选择bitflag值?

我有一组选项,一些正交(可以任意组合组合),一些独占(允许只允许一组),并需要选择一组enum值,以便它们可以按比特组合or并提取有点位and.我希望 - or无效组合是可检测的.

有没有像这样生成的工具enums

编辑清晰

我正在寻找能够利用某些标志组合无效以减少使用的位数的事实.我能够检测错误的要求是软的.如果事情被破坏,我不需要能够告诉我们使用了什么.

我正在使用C#,但任何解决方案都应该有用.

一个示例模式是:

0011 00
0101 00
1001 00
0110 00
1010 00
1100 00

0000 01
0000 10
Run Code Online (Sandbox Code Playgroud)

获得6个独占标志和一个2到6位的正交对

快速测试表明,5位给出9个值,6位给出20,...

language-agnostic code-generation bitflags bit-fields

2
推荐指数
1
解决办法
551
查看次数

C++中的Bitflag枚举

使用枚举在C++中存储位标志有点麻烦,因为一旦枚举值被OR化,它们就会松开它们的枚举类型,这会导致错误而不进行显式转换.

这个问题的接受答案表明|运营商超载:

FlagsSet operator|(FlagsSet a, FlagsSet b) 
{ 
    return FlagsSet(int(a) | int(b)); 
}
Run Code Online (Sandbox Code Playgroud)

我想知道这种方法是否有任何运行时影响?

c++ enums type-systems bitflags

2
推荐指数
1
解决办法
1416
查看次数

怎么命名一组标志?

我有一个项目,其中许多对象通过维护简单的布尔标志来保持状态.有很多这些,所以我将它们保存在一个uint32_t并使用位屏蔽.现在有这么多的标志,以保持跟踪,我创建了一个抽象为他们(只是一个包装类的uint32_t)用set(),clear()等等.

我的问题:这个班级有什么准确,简洁的名字?我可以给这个课程什么名字,以便你有一个合理的想法,因为只知道这个名字是什么?

我有一些想法:

  • FlagBank
  • FlagArray
  • 等等

有任何想法吗?

提前致谢!
干杯,
-Chris

c++ naming-conventions classname bitflags

2
推荐指数
1
解决办法
268
查看次数

为什么编译bitflags 1.0会产生"expect ident,found#"错误?

当我尝试使用macOS Sierra 10.12.6中的bitflags v1.0.1在Rust中构建项目时,代码失败并出现以下错误:

Compiling bitflags v1.0.1
error: expected ident, found #
   --> /Users/kenneth.marete/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.0.1/src/lib.rs:423:29
    |
423 |                               #[allow(deprecated)]
    |                               ^
    | 
   ::: /Users/kenneth.marete/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.0.1/src/example_generated.rs
    |
4   | / bitflags! {
5   | |     /// This is the same `Flags` struct defined in the [crate level example](../index.html#example).
6   | |     /// Note that this struct is just for documentation purposes only, it must not be used outside
7   | |     /// this crate.
...   |
13  | |     }
14  | | …
Run Code Online (Sandbox Code Playgroud)

bitflags rust

2
推荐指数
1
解决办法
227
查看次数

#defined比特标志和枚举 - "c"中的和平共存

我刚刚发现了bitflags的乐趣.我有几个关于在C语言中使用bitflags的"最佳实践"的问题.我从网上找到的各种例子中学到了一些东西,但仍然有问题.

为了节省空间,我在struct(A->flag)中使用单个32位整数字段来表示几组不同的布尔属性.总共有20个不同的位#define.其中一些是真正的存在/不存在标志(STORAGE-INTERNAL与STORAGE-EXTERNAL).其他人有两个以上的值(例如互斥的格式集:FORMAT-A,FORMAT-B,FORMAT-C).我已经定义了用于设置特定位的宏(同时关闭互斥位).如果在标志中设置了特定的位组合,我还定义了用于测试的宏.

但是,上述方法中丢失的是标记的特定分组,最好由枚举捕获.对于编写函数,我想使用枚举(例如,STORAGE-TYPE和FORMAT-TYPE),以便函数定义看起来不错.我希望仅使用枚举来传递参数,使用#defined宏来设置和测试标志.

  1. (a)如何A->flag以便携方式(跨32位/ 64位平台)将flag()定义为32位整数?

  2. (b)我是否应该担心如何存储A->flag#defined常量与枚举相比的潜在大小差异?

  3. (c)我是否使事情变得不必要地复杂化,这意味着我应该坚持使用#defined常量来传递参数作为普通的ints?在这一切中我还应该担心什么?

我为这个表达不清的问题道歉.它反映了我对潜在问题的无知.

c macros enums bitflags

1
推荐指数
2
解决办法
1372
查看次数

有效地检查Bitflag不变量(可能的位旋转)

我有一个byte我用来存储位标志.我有8个标志(每个位一个),可以分成4对2个标志,它们是互斥的.我已按以下方式安排了位标志:

ABCDEFGH
10011000
Run Code Online (Sandbox Code Playgroud)

当标志B也被设置时,不能设置标志A,反之亦然,因此标志A和B是互斥的.标志A和B都可以取消设置,而不是两者都设置.标志C&D,标志E&F和标志G&H也是如此.

当前测试用例(C语言):

#include <stdio.h>

int check(char b) { // used to check invariant
  return ((b&0xC0)==0xC0||(b&0x30)==0x30||(b&0x0C)==0x0C||(b&0x03)==0x03)?0:1;
}
int main() {
  char input[256] = {
  0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
  0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
  0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
  0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
  0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
  0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
  0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
  0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
  0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
  0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
  0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
  0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
  0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
  0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
  0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
  0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};

  char truth[256] = {
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

  int i,r;
  int f = 0;
  for(i=0; i<256; ++i) {
    r=check(input[i]);
    if(r != truth[i]) …
Run Code Online (Sandbox Code Playgroud)

c performance bit-manipulation bitflags

1
推荐指数
1
解决办法
145
查看次数

Delphi设置位标志

我的深度有点偏僻.

我正在使用Object Inspector中包含一些Flags的组件...

FCOPY
  Flags
    flShowProgress
    flConfirmation
Run Code Online (Sandbox Code Playgroud)

我需要根据要复制的文件的大小来更改flShowProgess.

if FileSize(aFilename) > 500000 then 
  FCOPY.Flags.flShowProgress:=True else
  FCOPY.Flags.flShowProgress:=False;
Run Code Online (Sandbox Code Playgroud)

显然不会编译.我做了一些搜索以找到一些例子,但我真的不知道我需要用来找到如何做到这一点的确切术语.

有人可以告诉我如何使用Flags打开flShowProgress仅适用于大于5M的文件,然后再关闭较小的文件吗?

谢谢.

delphi bitflags

1
推荐指数
1
解决办法
359
查看次数

为什么我的 [Flag] 枚举验证失败?

我是否从根本上误解了 HasFlags 的工作原理?我不明白为什么这段代码失败了。

此代码采用一个值并确定它是否是我的枚举值的有效组合。

枚举值的两个子组通过对其他成员进行“或”运算来标识:JustTheMonths 和 Exclusives。JustTheMonths 在 Enum 中声明,Exclusives 在验证方法中构建。

当我将 1 或 2(未分配或未知)传递给此方法时,它会正确地将它们标识为有效 - 独占,但不是 JustTheMonths 的成员。

但是,当我将 4 传递给此代码时,它正确地将其识别为整个集合的成员,但错误地将其识别为子组 JustTheMonths 的成员。

我在这里做错了什么?为什么我的代码认为 4 是 (8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8172 | 16344) 的成员?

    private void Form1_Load(object sender, EventArgs e)
    {
        FloweringMonth test = FloweringMonth.NotApplicable;

        if (IsValidFloweringMonthValue((int)test))
        {
            System.Diagnostics.Debug.WriteLine("Valid");
        }
        else
        {
            System.Diagnostics.Debug.WriteLine("Not Valid");
        }
    }

    [Flags]
    public enum FloweringMonth
    {
        Unassigned = …
Run Code Online (Sandbox Code Playgroud)

c# validation enums bitflags

1
推荐指数
1
解决办法
823
查看次数

-D name = definition和bitwise运算符

我试图了解下一次计算是如何执行的.

例如,如果这是我的终端命令

gcc ex2.c -D b+=2
Run Code Online (Sandbox Code Playgroud)

为什么我得到5?

#include <stdio.h>

int main() 
{
#ifdef b
    printf("%d\n", 2 b | ~ 2 b);
#endif
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

2 b表示2*b?

~2 b意味着2*b然后〜?

c gcc bitwise-operators bitflags

1
推荐指数
1
解决办法
58
查看次数

如何格式化c中的标志?

假设有标志定义,例如:

SHF_WRITE     0x1
SHF_ALLOC     0x2
SHF_EXECINSTR 0x4
SHF_MASKPROC  0xf0000000
Run Code Online (Sandbox Code Playgroud)

给定一个标志,我需要输出SHF_WRITE|SHF_ALLOC比特0x10x2打开.

怎么用C做的伎俩?

c bitflags

0
推荐指数
1
解决办法
680
查看次数

Python:为文件设置多个属性(例如系统、隐藏)

使用 Python 设置多个文件属性的方法是什么?

例如,我想将文件的属性设置为系统、隐藏。

我可以使用类似下面的东西,但它只会设置一个属性,并覆盖之前的写入:

import win32con, win32api, os

filename = "some file name"

win32api.SetFileAttributes(filename,win32con.FILE_ATTRIBUTE_SYSTEM)
win32api.SetFileAttributes(filename,win32con.FILE_ATTRIBUTE_HIDDEN)
Run Code Online (Sandbox Code Playgroud)

这将最终只有 Hidden 属性。

你如何同时设置这两个属性?谢谢。

python attributes bitflags file-attributes

-1
推荐指数
1
解决办法
2947
查看次数