标签: bitmask

什么是位掩码和掩码?

在关于JSON 的PHP 文档中,它提到了bitmask这个词.维基百科将其定义为面具.我不了解位掩码或掩码或它们如何有用.有人可以用外行的条款解释这些术语而不用行话吗?

bitmask

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

使用枚举类的C++ 11标准符合位掩码

您可以使用枚举类实现标准符合(如n3242草案的17.5.2.1.3所述)类型安全位掩码吗?我读它的方式,类型T是一个位掩码,如果它支持|,&,^,〜,| =,&=和^ =运算符,你还可以做if(l&r)其中l和r是T类型.列表中缺少的是运算符!=和==并允许排序一个也可能想要重载<.

让操作员工作只是烦人的样板代码,但我不知道如何(l&r).至少下面的代码不能用GCC编译(除了极其危险,因为它允许错误的隐式转换为int):

enum class Foo{
    operator bool(){
        return (unsigned)*this;
    }
};
Run Code Online (Sandbox Code Playgroud)

编辑:我现在肯定知道枚举类不能有成员.实际问题如果(l&r)仍然存在.

c++ bitmask bit-fields c++11 enum-class

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

位掩码问题?

我有以下内容:

public static final int LIMIT_ONE = 1;
public static final int TRADEABLE = (1 << 1);
public static final int SELLABLE = (1 << 2);
public static final int STORABLE = (1 << 3);
public static final int STORABLE_IN_WH = (1 << 4);
public static final int STORABLE_IN_LEGION_WH = (1 << 5);
public static final int BREAKABLE = (1 << 6);
public static final int SOUL_BOUND = (1 << 7);
public static final int UNK9 = (1 << 8); …
Run Code Online (Sandbox Code Playgroud)

java bitmask

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

有没有办法直接从SELECT查询匹配IP与IP + CIDR?

就像是

SELECT COUNT(*) AS c FROM BANS WHERE typeid=6 AND (SELECT ipaddr,cidr FROM BANS) MATCH AGAINST 'this_ip';

因此,您不首先从数据库中获取所有记录,然后逐个匹配它们.

如果c> 0则匹配.

BANS表:

id int auto incr PK
typeid TINYINT (1=hostname, 4=ipv4, 6=ipv6)
ipaddr BINARY(128)
cidr INT
host VARCHAR(255)
Run Code Online (Sandbox Code Playgroud)

DB:MySQL 5

查询时已知IP和IPv6类型(4或6).

IP例如是二进制格式的:: 1

BANNED IP例如是:: 1/64

mysql ip mask bitmask cidr

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

更新整数列中的特定位

我有一个mysql表,其中用户权限存储为位掩码:

|user   | permissions |
| Admin | 31          |
| User  | 13          |

           16 8  4  2  1
Admin ->   1  1  1  1  1  -> 16 + 8 + 4 + 2 + 1 -> 31
User  ->   0  1  1  0  1  ->  8 + 4 + 1 -> 13
Run Code Online (Sandbox Code Playgroud)

现在我想为每个使用sql查询的用户添加权限.假设我想为每个人添加权限16而不修改另一个位.

 UPDATE users SET permission = ????
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

mysql bitmask

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

如何在C中仅设置某个字节的某些位而不影响其余位?

假设我有一个类似于1010XXXX的字节,其中X值可以是任何值.我想将低4位设置为特定模式,比如1100,同时保持高4位不受影响.如何在C中以最快的速度完成这项工作?

c byte bitmask

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

我为什么要在PHP中使用按位/位掩码?

我正在使用PHP的用户角色/权限系统来处理脚本.

下面是使用我在phpbuilder.com上找到的权限的位掩码方法的代码.

在那个部分下面是一个更简单的版本w3hich可以做基本相同的事情没有位部分.

许多人建议在PHP中使用位操作符等设置和其他东西,但我从来没有理解为什么.在下面的代码中,使用第一个代码而不是第二个代码有什么好处

<?php
/**
 * Correct the variables stored in array.
 * @param    integer    $mask Integer of the bit
 * @return    array
 */
function bitMask($mask = 0) {
    $return = array();
    while ($mask > 0) {
        for($i = 0, $n = 0; $i <= $mask; $i = 1 * pow(2, $n), $n++) {
            $end = $i;
        }
        $return[] = $end;
        $mask = $mask - $end;
    }
    sort($return);
    return $return;
}


define('PERMISSION_DENIED', 0);
define('PERMISSION_READ', 1);
define('PERMISSION_ADD',  2); …
Run Code Online (Sandbox Code Playgroud)

php bit-manipulation bitmask

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

通过权限位掩码从MySQL数据库中选择用户?

我有用户表,并希望按位掩码标准选择一些行.我会用小例子来解释我的问题.

用户的结构

user_id             int           [primary key, auto_increment]
user_email          varchar(200)    
user_privileges     int
Run Code Online (Sandbox Code Playgroud)

注意:它有更多字段,但它们与此问题无关.

填充表可能如下所示

+---------+--------------------+-----------------+
| user_id | user_email         | user_privileges |  << binary
+---------+--------------------+-----------------+
| 1       | john@example.com   | 165             |  10100101
| 2       | max@example.com    | 13              |  00001101
| 3       | trevor@example.com | 33              |  00100001
| 4       | paul@example.com   | 8               |  00001000
| 5       | rashid@example.com | 5               |  00000101
+---------+--------------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

现在我想按特定权限bitmask(按user_privileges列)SELECT用户.

例如:

  • bitmask = 1 [00000001]将选择用户ID 1,2,3和5
  • bitmask = 9 …

php mysql select bitmask

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

在java中创建权限位掩码

我想做这样的事情:

public enum Permissions
{
    CanBlah1,
    CanBlah2,
    CanBlah3
}

byte[] userPerm = Permissions.CanBlah1 | Permissions.CanBlah2;

// check permssions
//
if(userPerm && Permissions.CanBlah1 == Permissions.CanBlah1)
{
      // do something
}
Run Code Online (Sandbox Code Playgroud)

你能用Java做到这一点吗?(我来自ac#background)

java bitmask

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

如果位掩码包含位,我该如何检查?

我不太了解整个bitmask概念.

假设我有一个面具:

var bitMask = 8 | 524288;
Run Code Online (Sandbox Code Playgroud)

我已了解,这是我怎么会结合起来8,并524288和获得524296.

但是,我该如何走另一条路呢?如何检查我的位掩码,看它是否包含8和/或524288

为了使它更复杂,让我们说我的位掩码是18358536,我需要检查是否8524288在该位掩码.我到底怎么做?

c# bit-manipulation bitmask

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

标签 统计

bitmask ×10

mysql ×3

bit-manipulation ×2

java ×2

php ×2

bit-fields ×1

byte ×1

c ×1

c# ×1

c++ ×1

c++11 ×1

cidr ×1

enum-class ×1

ip ×1

mask ×1

select ×1