问题标签 [bit-manipulation]

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 投票
14 回答
56606 浏览

c - 钳制真实(固定/浮点)值的最快方法?

有没有比使用 if 语句或三元运算符更有效的方法来钳制实数?我想为双打和 32 位定点实现 (16.16) 执行此操作。我不是要求可以处理这两种情况的代码。它们将在单独的函数中处理。

显然,我可以这样做:

或者

固定点版本将使用函数/宏进行比较。

这是在代码的性能关键部分完成的,所以我正在寻找一种尽可能有效的方法来做到这一点(我怀疑这会涉及位操作)

编辑:它必须是标准/可移植的 C,平台特定的功能在这里没有任何意义。此外,MY_MIN并且MY_MAX与我想要钳制的值的类型相同(在上面的示例中为双精度)。

0 投票
4 回答
6610 浏览

windows - 如何在 bat 文件中按位制作?

我已经尝试过以下方法,但它只是说“&在这个时候是出乎意料的”。

0 投票
7 回答
534 浏览

language-agnostic - 检测整数内的单个一位流

我必须检查一个数字是否满足以下条件:

  • 在二进制中,所有一位必须是连续的。
  • 该数字必须至少设置一位。
  • 连续的一位可能从 MSB 开始或在 LSB 结束,因此如果该数字由单个一位流和一个零位流组成,则完全有效,反之亦然。

我编写了一个代码来检查这些条件是否存在实际问题(检查数据文件完整性)。

它可以正常工作,而且时间紧迫,但我是一个老顽固的怪胎,喜欢这样的谜题,所以我试图想出一种更聪明的方法来检查单比特流。

字符串被零包围的情况很容易,但不能处理特殊情况。

欢迎任何想法、二进制黑客和部分解决方案!


为了让我的要求更清楚一些例子:以下数字满足我的标准:

以下数字没有(因为它们有多个连续的一串):

0 投票
31 回答
235392 浏览

c - 四舍五入到 2 的下一个幂

我想编写一个返回最接近 2 的下一个幂的函数。例如,如果我的输入是 789,则输出应该是 1024。有没有什么方法可以在不使用任何循环而只使用一些位运算符的情况下实现这一点?

0 投票
3 回答
2051 浏览

vb6 - (VB6) 将 32bit Long 转换为 String*6 [AZ]

我希望将 32 位 Long 转换为 String*6,它只使用字符 [AZ]。

使用 VB6(不要问!)。

我计算出单个字母使用 5 位,所以我可以从 32 位长中得到 6 个字母。

谁能给我一个关于如何做到这一点的指针,因为我不知道。

0 投票
9 回答
7112 浏览

algorithm - 通过位旋转查找循环调度中的下一个

考虑以下问题。您有一个位串,它表示单热编码中的当前计划从站。例如,“00000100”(最左边的位为#7,最右边的位为#0)表示从#2 被调度。

现在,我想在循环调度方案中选择下一个调度的从站,但要有所改变。我有一个“请求掩码”,它说明了哪些奴隶实际上想要被安排。下一个奴隶只会从那些想要的人中挑选出来。

一些示例(假设循环调度是通过向左旋转完成的)。示例 1:

  • 当前:“00000100”
  • 掩码:“01100000”
  • 下一个时间表:“00100000” - 在正常循环中,#3 和 #4 应该在 #2 之后,但他们没有请求,所以选择 #5。

示例 2:

  • 当前:“01000000”
  • 掩码:“00001010”
  • 下一个:“00000010” - 因为调度是通过向左循环完成的,并且 #1 是该顺序中的第一个请求从站。

现在,我知道,这可以很容易地在一个循环中编码。但我实际上想通过一个不循环的操作来得到我的结果。动机:我想在 VHDL/Verilog 中的硬件(在 FPGA 中)实现这一点。

一个额外的好处是组成一个对任意数量的奴隶 N 通用的算法。

顺便说一句,这不是一个家庭作业问题。每当想要以某种方式调度从属设备时,这是一个重要的问题,并根据从属设备的请求来调节调度。我目前的解决方案有点“沉重”,我想知道我是否遗漏了一些明显的东西。

0 投票
7 回答
1834 浏览

sql - 位域的 SQL 逻辑与运算符

我有 2 个具有多对多关系的表;一个个体可以属于许多组。一个组可以有许多个人。

个人基本上只有他们的主键 ID

组有一个主键 ID、IndividualID(与个人表中的 ID 相同)和一个位标志,用于表明该组是否是个人的主要组

理论上,组表中任何给定个体的所有条目(除一个条目外)都应将该位标志设置为 false,因为每个个体必须恰好有 1 个主组。

我知道对于我当前的数据集,这个假设不成立,并且我有一些个人将所有组的主要标志设置为 false。

我无法生成将这些人返回给我的查询。

我得到的最接近的是:

SELECT * FROM Individual i LEFT JOIN Group g ON g.IndividualID = i.ID WHERE g.IsPrimaryGroup = 0

但是比 SUM 或 MAX 更进一步是行不通的,因为该字段是位字段,而不是数字。

有什么建议么?

0 投票
2 回答
2448 浏览

c# - 按位或组合

这是最常用的正则表达式函数之一

你能解释一下 Regex.IsMatch 方法是如何工作的吗?我的意思是它如何处理按位 OR RegexOptions 参数?它如何定义方法参数?

感谢您的回复!

0 投票
6 回答
8216 浏览

javascript - JavaScript 字节序编码?

对 SO 的回应让我想到,JavaScript 是否保证跨操作系统和浏览器的某种字节序编码?

或者换句话说,在 JavaScript 中整数“安全”的按位移位?

0 投票
6 回答
6466 浏览

c++ - 模板化无分支 int 最大/最小函数

我正在尝试编写一个无分支函数来返回两个整数的 MAX 或 MIN 而不诉诸 if(或?:)。使用通常的技术,对于给定的字长,我可以很容易地做到这一点:

现在,假设真的在必要的有序处理器上编写这种应用程序,我的问题是是否有一种方法可以使用 C++ 模板将其推广到所有大小的 int。

当然,>>31步骤仅适用于 int32,虽然我可以复制 int8、int16 和 int64 函数的重载,但似乎我应该使用模板函数。但是如何以为单位获取模板参数的大小?

还有比这更好的方法吗?我可以强制对掩码 T 进行签名吗?如果 T 是无符号的,则掩码移位步骤将不起作用(因为它将是逻辑移位而不是算术移位)。

而且,完成上述操作后,我可以防止它被用于除整数类型以外的任何东西(例如,没有浮点数或类)?