标签: bitmask

(x ^ 0x1)!= 0是什么意思?

我遇到了以下代码段

if( 0 != ( x ^ 0x1 ) )
     encode( x, m );
Run Code Online (Sandbox Code Playgroud)

什么x ^ 0x1意思?这是一些标准技术吗?

c c++ bit-manipulation bitmask

183
推荐指数
12
解决办法
2万
查看次数

什么是位屏蔽?

我对C编程很新,我遇到了掩码.有人可以向我解释位屏蔽的一般概念和功能吗?非常感谢例子.

c terminology bit-manipulation bitmask bitwise-operators

162
推荐指数
2
解决办法
24万
查看次数

在C#中使用位掩码

假设我有以下内容

int susan = 2; //0010
int bob = 4; //0100
int karen = 8; //1000
Run Code Online (Sandbox Code Playgroud)

我将10(8 + 2)作为参数传递给方法,我想将其解码为苏珊和卡伦

我知道10是1010

但是我如何做一些逻辑来查看是否检查了特定位

if (condition_for_karen) // How to quickly check whether effective karen bit is 1
Run Code Online (Sandbox Code Playgroud)

现在,我能想到的是检查我通过的号码是否正确

14 // 1110
12 // 1100
10 // 1010
8 //  1000
Run Code Online (Sandbox Code Playgroud)

当我在我的真实场景中拥有更多的实际比特时,这似乎是不切实际的,使用掩码来检查我是否满足karen条件的更好方法是什么?

我可以想到向左移动然后向后移动然后向右移动然后移回到除了我感兴趣的那个之外的其他位置,但这似乎也过于复杂.

c# bitmask

91
推荐指数
5
解决办法
12万
查看次数

在Objective-C中声明和检查/比较(bitmask-)枚举

你知道在Cocoa中有这个东西,比如你可以创建一个UIView并做:

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
Run Code Online (Sandbox Code Playgroud)

我有一个UIView具有多个状态的自定义,我已经在enum这样定义:

enum DownloadViewStatus {
  FileNotDownloaded,
  FileDownloading,
  FileDownloaded
};
Run Code Online (Sandbox Code Playgroud)

对于每个创建的子视图,我设置它tag:subview1.tag = FileNotDownloaded;

然后,我有一个视图状态的自定义setter,它执行以下操作:

for (UIView *subview in self.subviews) {
  if (subview.tag == viewStatus)
    subview.hidden = NO;
  else
    subview.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)

我想做的是允许这样做:

subview1.tag = FileNotDownloaded | FileDownloaded;
Run Code Online (Sandbox Code Playgroud)

所以我subview1出现在我看来的两个状态.目前,由于|运算符似乎添加了两个枚举值,因此它不会出现在这两个状态中的任何一个状态中.

有没有办法做到这一点?

c cocoa enums objective-c bitmask

77
推荐指数
2
解决办法
3万
查看次数

什么时候将标志存储为位掩码而不是使用关联表?

我正在开发一个应用程序,其中用户具有使用不同功能的不同权限(例如,读取,创建,下载,打印,批准等).预计权限列表不会经常更改.我有几个如何在数据库中存储这些权限的选项.

选项2在哪些情况下更好?

选项1

使用关联表.

User
----
UserId (PK)
Name
Department
Permission
----
PermissionId (PK)
Name
User_Permission
----
UserId (FK)
PermissionId (FK)

选项2

为每个用户存储位掩码.

User
----
UserId (PK)
Name
Department
Permissions
[Flags]
enum Permissions {
    Read = 1,
    Create = 2,
    Download = 4,
    Print = 8,
    Approve = 16
}
Run Code Online (Sandbox Code Playgroud)

c# sql-server database-design bitmask

75
推荐指数
4
解决办法
8059
查看次数

位掩码(标志)枚举变得太大时该怎么办

我在我的应用程序中拥有一组非常大的权限,我使用Flags枚举表示.它正在快速接近长数据类型的实际上限.我不得不提出一个战略,很快就会转变为一个不同的结构.现在,我可以将此列表分解为更小的部分,但是,根据我们的应用程序布局,这已经只是我们应用程序的总体权限的一部分.在管理权限时,我们广泛使用这种区别用于显示目的,如果我可以避免,我宁愿不再重新访问该代码.

还有其他人遇到过这个问题吗?你是怎么过去的?一般的例子很好,但我最感兴趣的是ac#specific example,如果有任何语言特定的技巧可以用来完成工作.

可能不是必需的,但这里是当前为我正在处理的应用程序部分定义的权限列表.

//Subgroup WebAgent
[Flags]
public enum WebAgentPermission : long
{
    [DescriptionAttribute("View Rule Group")]
    ViewRuleGroup = 1,
    [DescriptionAttribute("Add Rule Group")]
    AddRuleGroup = 2,
    [DescriptionAttribute("Edit Rule Group")]
    EditRuleGroup = 4,
    [DescriptionAttribute("Delete Rule Group")]
    DeleteRuleGroup = 8,
    [DescriptionAttribute("View Rule")]
    ViewRule = 16,
    [DescriptionAttribute("Add Rule")]
    AddRule = 32,
    [DescriptionAttribute("Edit Rule")]
    EditRule = 64,
    [DescriptionAttribute("Delete Rule")]
    DeleteRule = 128,
    [DescriptionAttribute("View Location")]
    ViewLocation = 256,
    [DescriptionAttribute("Add Location")]
    AddLocation = 512,
    [DescriptionAttribute("Edit Location")]
    EditLocation = 1024,
    [DescriptionAttribute("Delete Location")]
    DeleteLocation = 2048,
    [DescriptionAttribute("View Volume Statistics")] …
Run Code Online (Sandbox Code Playgroud)

c# permissions enums types bitmask

70
推荐指数
6
解决办法
4万
查看次数

How to implement a bitmask in php?

I'm not sure if bitmask is the correct term. Let me explain:

In php, the error_reporting function can be called multiple ways:

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);
Run Code Online (Sandbox Code Playgroud)

I got the term bitmask …

php bitmask

69
推荐指数
2
解决办法
2万
查看次数

如何使用位掩码?

我如何在C++中使用它?何时使用有用?
请给我一个使用位掩码的问题示例,它实际上是如何工作的.谢谢!

c++ bitmask c++11

53
推荐指数
4
解决办法
12万
查看次数

比较SQL中的两个位掩码以查看是否有任何位匹配

有没有办法比较Transact-SQL中的两个位掩码,看看是否有任何匹配的位?我有一个User表,其中包含用户所属角色的位掩码,我想选择所有在提供的位掩码中具有任何角色的用户.因此,使用下面的数据,角色位6(设计师+程序员)应选择Dave,Charlie和Susan,但不能选择Nick.

User Table
----------
ID  Username  Roles
1   Dave      6
2   Charlie   2
3   Susan     4
4   Nick      1

Roles Table
-----------
ID  Role
1   Admin
2   Programmer
4   Designer

有任何想法吗?谢谢.

sql t-sql sql-server bitmask

47
推荐指数
3
解决办法
4万
查看次数

if(mask&VALUE)或if((mask&VALUE)== VALUE)?

您可能熟悉enum位掩码方案,例如:

enum Flags {
    FLAG1 = 0x1,
    FLAG2 = 0x2,
    FLAG3 = 0x4,
    FLAG4 = 0x8,

    NO_FLAGS = 0,
    ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};

f(FLAG2 | FLAG4);
Run Code Online (Sandbox Code Playgroud)

我已经看过很多代码,然后在掩码中测试一下

if ((mask & FLAG3) == FLAG3)
Run Code Online (Sandbox Code Playgroud)

但这不等于这个吗?

if (mask & FLAG3)
Run Code Online (Sandbox Code Playgroud)

有没有理由使用第一个版本?在我看来,第二个较短的版本更清晰.

也许C程序员的剩余习惯应该转换为真正的价值观1?(即使在那里,较长的版本在赋值或return语句中比在条件语句测试中更有意义.)

c++ bitmask

36
推荐指数
1
解决办法
3万
查看次数