我看到下面的代码行这里的C.
int mask = ~0;
Run Code Online (Sandbox Code Playgroud)
我已经打印了maskC和C++ 的值.它总是打印-1.
所以我确实有一些问题:
~0要为掩码变量赋值?~0什么?-1而不是~0吗?要在Objective-C中定义类别位掩码枚举,我曾经输入:
typedef NS_OPTIONS(NSUInteger, CollisionCategory)
{
CollisionCategoryPlayerSpaceship = 0,
CollisionCategoryEnemySpaceship = 1 << 0,
CollisionCategoryChickenSpaceship = 1 << 1,
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现相同的使用Swift?我尝试了枚举,但无法使其正常工作.这是我到目前为止所尝试的.

如果我有一个基本的位掩码......
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中)?
我在我的项目的一部分中有这个代码:
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) 在pygame中是否有任何方法可以在屏幕内的屏幕上显示某些内容.例如:如果你有一个掩码,其中所有位都设置为1,除了topleft corner和全黑图像,而不更改图像,你能保持左上角(与掩码相同)清除吗?只更新掩码(而不是矩形)会有所帮助.
我正在深入研究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) 我需要创建三个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)
但它似乎有点凌乱.任何人都可以提出更简洁(和可读)的方式吗?
我有一个带有位掩码列的表(unsigned int).该字段的值为1,2,4,8,16等.
如何选择NOT特定值?IE我不关心其他位是什么 - 只是特定位为0.
我尝试过的:
从mytable中选择count(*);
这给了我3387255.
从mytable中选择count(*),其中outageMask&〜8;
这给了我552061.
所以我认为:
从mytable中选择count(*),其中outageMask&8;
会给我2835194.不是这样.相反,我得到了87711.
我究竟做错了什么?
我试图通过位掩码将四个独立的 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) bit-masks ×9
bitmask ×3
c ×2
c++ ×2
sprite-kit ×2
swift ×2
c# ×1
gameplay-kit ×1
ios ×1
javascript ×1
masking ×1
mysql ×1
objective-c ×1
pygame ×1
python ×1
readability ×1