标签: bit-masks

"int mask =〜0;"的目的是什么?

我看到下面的代码行这里的C.

 int mask = ~0;
Run Code Online (Sandbox Code Playgroud)

我已经打印了maskC和C++ 的值.它总是打印-1.

所以我确实有一些问题:

  • 为什么~0要为掩码变量赋值?
  • 目的是~0什么?
  • 我们可以用-1而不是~0吗?

c c++ bit-manipulation masking bit-masks

44
推荐指数
4
解决办法
4066
查看次数

如何在Swift中为SpriteKit定义类别位掩码枚举?

要在Objective-C中定义类别位掩码枚举,我曾经输入:

typedef NS_OPTIONS(NSUInteger, CollisionCategory)
{
    CollisionCategoryPlayerSpaceship = 0,
    CollisionCategoryEnemySpaceship = 1 << 0,
    CollisionCategoryChickenSpaceship = 1 << 1,
};
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现相同的使用Swift?我尝试了枚举,但无法使其正常工作.这是我到目前为止所尝试的.

错误截图

objective-c bit-masks ios sprite-kit swift

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

位掩码:如何确定是否只设置了一个位

如果我有一个基本的位掩码......

cat = 0x1;
dog = 0x2;
chicken = 0x4;
cow = 0x8;

// OMD has a chicken and a cow
onTheFarm = 0x12;
Run Code Online (Sandbox Code Playgroud)

...如何检查是否只设置了一只动物(即一位)?

onTheFarm必须为2 n,但如何以编程方式检查(最好是在Javascript中)?

javascript bitmask bit-masks

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

位掩码切换语句

我在我的项目的一部分中有这个代码:

enum myEnum
{
    invalid = -1,
    val1 = 1,
    val2 = 2,
    val3 = 4
};

int bitmask = val1 | val3;

if(bitmask & val1)
    ...
if(bitmask & val2)
    ...
if(bitmask & val3)
    ...
Run Code Online (Sandbox Code Playgroud)

这很好,它完美地工作,但我总是想知道是否可以通过开关完成.我在思考这个问题:

int checkMask(int& mask)
{
    for(int i = 0; mask; mask &= ~(1 << i++))
    {
        if(mask & (1 << i))
        {
            int ret = mask & (1 << i);
            mask &= ~ret;
            return ret;
        }
    }

    return invalid;
}

#define START_BITMASK_SWITCH(x) int xcopy = …
Run Code Online (Sandbox Code Playgroud)

c++ bitmask bitwise-operators bit-masks switch-statement

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

Pygame - 有没有办法只在面具中进行blit或更新

在pygame中是否有任何方法可以在屏幕内的屏幕上显示某些内容.例如:如果你有一个掩码,其中所有位都设置为1,除了topleft corner和全黑图像,而不更改图像,你能保持左上角(与掩码相同)清除吗?只更新掩码(而不是矩形)会有所帮助.

python pygame bit-masks

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

如何解释这个物理体位掩码系统的Swift SpriteKit示例代码

我正在深入研究Apples SpriteKit和GameplayKit示例代码,并发现了一个名为'DemoBots'的项目,用Swift编写.在项目中使用了一些非常有趣的概念,我想要适应我的项目.

我已经在将碰撞处理封装到一个处理程序类中,这与在该示例代码中处理碰撞的方式非常相似.

在这个项目中,我找到了一个名为的结构的代码RPColliderType:

struct RPColliderType: OptionSetType, Hashable, CustomDebugStringConvertible {
    // MARK: Static properties

    /// A dictionary to specify which `ColliderType`s should be notified of contacts with other `ColliderType`s.
    static var requestedContactNotifications = [RPColliderType: [RPColliderType]]()

    /// A dictionary of which `ColliderType`s should collide with other `ColliderType`s.
    static var definedCollisions = [RPColliderType: [RPColliderType]]()

    // MARK: Properties

    let rawValue: UInt32

    // MARK: Options

    static var Obstacle: RPColliderType  { return self.init(rawValue: 1 << 0) }
    static var PlayerBot: RPColliderType { return …
Run Code Online (Sandbox Code Playgroud)

bit-masks sprite-kit swift swift-dictionary gameplay-kit

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

有简洁的方法在C中创建位掩码吗?

我需要创建三个32位的掩码unsigned ints(让我们称之为x,y和z).面具应该像这样结束:

x: 0000 0001 1111 1111 1111 1111 1111 1111
y: 0000 1110 0000 0000 0000 0000 0000 0000
z: 1111 0000 0000 0000 0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这个:

unsigned int x = (1<<25)-1;
unsigned int y = (~x)&((1<<28)-1);
unsigned int z = (~x)<<3;
Run Code Online (Sandbox Code Playgroud)

但它似乎有点凌乱.任何人都可以提出更简洁(和可读)的方式吗?

c readability bit-manipulation bit-masks

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

mysql/bitmask:选择NOT值

我有一个带有位掩码列的表(unsigned int).该字段的值为1,2,4,8,16等.

如何选择NOT特定值?IE我不关心其他位是什么 - 只是特定位为0.

我尝试过的:

从mytable中选择count(*);

这给了我3387255.

从mytable中选择count(*),其中outageMask&〜8;

这给了我552061.

所以我认为:

从mytable中选择count(*),其中outageMask&8;

会给我2835194.不是这样.相反,我得到了87711.

我究竟做错了什么?

mysql bit-masks

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

在c#中通过位掩码存储多个值

我试图通过位掩码将四个独立的 5 位值 (0-31) 存储在 32 位 int 内,但无法正确设置这些值,并从用于存储的掩码 int 中获取各个值。

谁能帮我这个?

编辑:

抱歉外部链接 - 这里有一些 JavaScript 演示了我想要实现的目标(但使用位掩码而不是十进制代数):

var s = 0;

var v = [31, 6, 23, 31];

//save values
s = v[0] + (v[1] * 32) + (v[2] * 1024) + (v[3] * 32768);

console.log(s);

//retrieve values
v[3] = parseInt(s / 32768);
v[2] = parseInt((s - (v[3] * 32768)) / 1024);
v[1] = parseInt((s - ((v[3] * 32768) + (v[2] * 1024))) / 32);
v[0] = parseInt(s - …
Run Code Online (Sandbox Code Playgroud)

c# bitmask bit-masks

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