问题标签 [bit-masks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
133 浏览

sprite-kit - SpriteKit 中的物理接触

是否可以解释位掩码如何仅适用于这种简单的情况:

他们之间没有碰撞,因为不知何故,这在他们之间被关闭了。我假设通过将它们的碰撞掩码设置为 00 一直到 32 位......但是让我们把它留给另一个问题,我还没有想出如何关闭这些。

将每个球设置为具有唯一的接触位掩码后,如何在它们接触时提供联系信息?

如何知道哪两个球相互接触?

是否可以让任何给定接触中的最大球只收到联系信息?


更新:

我不一定在代码之后。如果你需要代码来解释什么是什么,它是如何工作的,以及为什么不管做什么,那就去做吧。

但我真正追求的是理解位掩码如何工作以提供允许确定“谁”参与任何联系的逻辑。

我给每个球尺寸一个不同的位掩码的原因是我认为这可能有助于确定两个球之间任何给定接触中的较大球。不过,我可能错了。

更新 2:

对进展过程的理解:

据我了解,这些是该过程的一部分:

  1. 将 SKView 子类化为 SKScene 注册为符合物理世界联系通知委托。也说是这样。

  2. 将位掩码设置为希望在模拟中了解和/或控制的每种身体交互类型的类别

  3. 使用这些位掩码,通过适当地应用它们来阐明希望成为接触和/或碰撞一部分的每个对象的性质(这里有一些神奇的决策)。

  4. 在注册为委托的同一个 SKView 子类中,使用执行操作的代码覆盖联系人回调

  5. 创建一些魔术代码来确定谁/什么联系了谁。


我了解其中一些,但不了解设置联系人位掩码与命名类别位掩码的推理之间的差异,也不了解如何确定谁联系了谁。

0 投票
1 回答
2052 浏览

hex - 如何从十进制转换为位掩码?

我有一个以前由其他人构建的 ACL 系统,我试图了解位掩码是如何工作的。我定义了这 4 个常量:

然后在 DB 中,我看到具有 1、2、5、9、15 等权限的用户。我尝试使用此工具对其进行转换,最终得到以下结果:

我认为这项工作如下:

因为最后两位是1我假设那些拥有权限的用户3将拥有UPDATE|DELETE权限(见上表)。是对的吗?如果不是,从十进制转换为位掩码的正确方法是什么?

0 投票
1 回答
292 浏览

symlink - 符号链接的 st_mode 具有奇怪的值

我正在stat()使用这个符号链接(在 Kubuntu GNU/Linux 16.04 上),并且得到了八进制 0100600(十进制 33152)的奇怪值。如果我按位S_IFMT(即 0170000 八进制),我得到 0600 八进制。这意味着什么?stat.h列出以下值:

我期待看到 0120000,而不是 0600(全八进制)。是什么赋予了?

0 投票
1 回答
50 浏览

binary - 32 位 int 结构位似乎不匹配(nodejs)

我有一个文件,它定义了一组瓷砖(用于在线游戏)。每个图块的格式如下:

总共 32 位,因此每个 tile 可以表示为 32 位整数。

关于文件格式的更多信息可以在这里找到:

http://wiki.minegoboom.com/index.php/LVL_Format

http://www.rarefied.org/subspace/lvlformat.html

4 字节结构不会沿字节边界断开。如您所见,x: 和 y: 都定义为 12 位。IE。x以 1.5 字节y存储,以 1.5 字节tile存储,以 1 字节存储。

即使使用 12 位xy它们的最大值是1023,所以它们可以用 10 位表示。这取决于格式的创建者。我猜他们只是在填充东西,以便他们可以为每个图块使用 32 位整数?无论哪种方式,x我们y都可以忽略最后 2 位。

我正在使用 nodejs 缓冲区来读取文件,并且正在使用以下代码来读取值。

这段代码工作正常,但是当我自己阅读这些位时,为了更好地理解二进制,我看到了一些让我感到困惑的东西。

以表示以下内容的 int 为例:

在地图编辑器中创建切片并将生成的文件读入缓冲区返回<Buffer ff f3 3f 01>

当我将每个字节转换为一串位时,我得到以下信息:

我想我应该只取前 12 位,x但砍掉最后 2 位。使用接下来的 12 位作为y,再次砍掉 2 位,剩下的 8 位将是tile.

x正确(1111111111 = 1023),错误(0011001111 = 207,而y不是 1023),瓷砖正确(00000001 = 1)

我很困惑,显然错过了一些东西。

0 投票
1 回答
1005 浏览

c# - C#中的位掩码,从枚举转换为字节[]

我有一个关于位掩码的问题,我完全不熟悉。在应用程序中,目前有一种方法可以获取地址的字节 [],并从中确定哪些警报(布尔值)true属于false.

我正在寻求扭转这种情况。我会有一个属性列表(bool),并根据哪些是真的,我会创建一个地址。

有没有一种简单的内置方法可以做到这一点?

任何帮助将非常感激。下面我附上了我的代码,用于获取地址中启用了哪些标志。

0 投票
1 回答
46 浏览

sprite-kit - SpriteKit SWIFT 中的位掩码问题

在我的游戏中,我有不同颜色的圆圈。他们应该只与不属于他们颜色的边界发生碰撞。为此,我首先为正常圆分配一个类别位掩码。

边界具有以下掩码:

在圆圈与选择器碰撞后,它会得到一个位掩码,应该使它停止与边界碰撞,但事实并非如此。

当圆与选取器发生碰撞时,将执行此代码。结构中的值(如青色和洋红色)分别代表不与该颜色边界冲突的圆的状态。我的错误在哪里?

0 投票
2 回答
106 浏览

c - 查找寄存器位置较高和较低的掩码值

一个 32 位寄存器,即 status_reg 有 1 个字段 (field_1 <0:31>)。要设置和清除此寄存器,我试图获取此寄存器的掩码值。所以一般来说,要获得掩码值,公式是:

在此hbit是较高位置位,即 31。而lbit是较低位置位 ie0。我期望掩码值应该是 0xFFFFFFFF。但是得到掩码= 0。任何人都可以建议掩码有什么问题吗?

我使用的是 32 位系统。

0 投票
1 回答
30 浏览

bit - 掩码(位宏)

所以我即将完成我在大学的 C 编程课程。我想在位操作(例如创建掩码)方面做得更好,所以我会去做:

我还处于早期阶段,目前正在学习语法,我不知道为什么编译器说有错误:严重性代码描述项目文件行抑制状态错误(活动)E0109 表达式前面的明显调用必须有括号(指针- to-) 函数类型 Project14

完整程序(是的,它仅适用于 synatx):

0 投票
3 回答
327 浏览

c - 如何忽略变量中的位

我想知道如何删除位值中的位。

我收到一个 10 位的值(位 0 到位 9),我必须发送一个变量,忽略接收到的值的位 0、位 2、位 4 和位 6,然后我的变量将是:位 987531。我该怎么办? 我听说过掩码位我真的不知道如何使用它即使我知道掩码是0x55

感谢你们对我的帮助

0 投票
6 回答
5442 浏览

c++ - “int mask = ~0;”的目的是什么?

我在 C中看到了以下代码行。

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

所以我确实有一些问题:

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