问题标签 [bitwise-operators]

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

bitwise-operators - 是否可以使用整数算术实现位运算符?

我面临一个相当特殊的问题。我正在为不支持按位运算的架构开发编译器。但是,它处理有符号的 16 位整数运算,我想知道是否可以仅使用以下方法实现按位运算:

  • 加法( c = a + b )
  • 减法( c = a - b )
  • 除法( c = a / b )
  • 乘法( c = a * b )
  • 模数( c = a % b )
  • 最小值( c = min(a, b) )
  • 最大值( c = max(a, b) )
  • 比较c =(a < b),c =(a == b),c =(a <= b)等
  • 跳转goto、for 等

我希望能够支持的按位运算是:

  • ( c = a | b )
  • ( c = a & b )
  • 异或( c = a ^ b )
  • 左移( c = a << b )
  • 右移( c = a >> b )
  • (所有整数都有符号,所以这是一个问题)
  • 有符号移位( c = a >>> b )
  • 一个的补码( a = ~b )
  • (已经找到解决方案,见下文)

通常问题是相反的。如何使用按位 hack 实现算术优化。但是在这种情况下不是。

这种架构上的可写内存非常稀缺,因此需要按位运算。按位函数本身不应使用大量临时变量。但是,常量只读数据和指令内存是丰富的。附带说明一下,跳转和分支并不昂贵,并且所有数据都可以轻松缓存。跳转花费的周期是算术(包括加载/存储)指令的一半。换句话说,所有上述支持的功能都花费了单次跳转周期的两倍。


一些可能有帮助的想法:

我发现您可以使用以下代码进行补码(否定位):

我还记得用 2 的幂除时的旧移​​位技巧,因此按位移位可以表示为:

对于其余的按位运算,我有点不知所措。我希望这种架构的架构师能够提供位操作。

我还想知道是否有一种快速/简单的方法可以在不使用内存数据表的情况下计算两个的幂(用于移位操作)。一个天真的解决方案是跳入乘法领域:

或 Set & Jump 方法:

0 投票
9 回答
18739 浏览

c++ - 如何在 C++ 中访问数字的符号位?

我希望能够访问 C++ 中数字的符号位。我当前的代码如下所示:

这似乎可行,给我0正数和-1负数。-1但是,我看不到负数是如何得到的:如果 12 是

然后 -12 是

并将其移动 31 位将使

哪个是 1,而不是 -1,那么为什么当我移动它时会得到 -1?

0 投票
2 回答
373 浏览

mysql - 当只对列进行位操作时,mysql 索引对列“状态”有用吗?

我有很多域实体(存储在 mysql 中),它们经历了很多不同的操作。每个操作都是从不同的程序执行的。我需要为这些实体保留(流)状态,这些实体作为用作位集的长字段“流状态”实现。

查询 mysql 以获取经过特定操作的实体,我执行以下操作:

指示位 7(对应于操作 7)已运行。(<-- 简化)

无论如何,一开始我真的没有注意这个设置对性能的影响,而且我认为我遇到了一些麻烦,因为上面的查询运行得很慢。

我想知道的是:'flowstate' 上的 mysql 索引是否有帮助?毕竟它不是 Mysql 可以使用二进制排序或其他方式快速找到的单个值。

如果没有,我还能做些什么来加快速度吗?. 对于具有上述用例的字段,是否有特殊的“掩码索引”?

TIA,吉尔特詹

0 投票
0 回答
5242 浏览

javascript - 零填充位移 0 有什么好处?(一个 >>> 0)

我刚刚在 Mozilla Javascript 文档中看到了这篇文章:

我不太明白为什么要这样做。零填充右移this.length有什么好处0?据我了解,它完全没有任何作用。是否可以安全地为 建立默认值len,即使this.length不是整数?这可能是可行的吗?>> 0如果是这样,和有什么区别>>> 0

0 投票
9 回答
5165 浏览

c - Comparing floats using bitwise operators

How to do comparisons of float values using series of bitwise operations?

0 投票
10 回答
118045 浏览

c - 从整个整数中获取每个单独的数字

假设我有一个名为“score”的整数,它看起来像这样:

现在我想做的是使用按位运算符从分数中获取每个数字 1、5、2、9、5、8、7 (参见下面的编辑说明)。

我很确定这是可以做到的,因为我曾经使用过类似的方法从十六进制颜色值中提取红绿色和蓝色值。

我该怎么做?

编辑
它不一定是按位运算符,我只是认为那样会更简单。

0 投票
2 回答
404 浏览

vb.net - 打开 Short 的最左边位

原来的问题变了。

我想按位关闭 Short 值 (&H8000) 的最左边的位,并保留其他位。

按位运算符没有更短的方法吗?

当我做

我得到一个编译器错误,因为它上升了,而不是否定它。

0 投票
1 回答
79 浏览

binary - 使用按位权限时如何正确取消权限?

好的,这就是我打算做的事情的要点。

我要准备两张桌子。一种带有“等级”或“角色”,一种带有用户。我想基于角色/用户分配权限并基于用户收回权限。

因此,仅出于一般目的假设我们有 $role_can $user_can 和 $user_cant

我知道为了指定哪些目的,我们可以使用按位或。$permissions = ($role_can | $user_can) 将两者结合起来。

现在,我希望在那之后能够收回某些权限。这通常使用按位 XOR 完成,但我想让它成为白痴证明。换句话说,我不想通过排除他们尚未拥有的权限来意外授予他们对权限的访问权限。

做这个的最好方式是什么?

传统上 (($role_can | $user_can) ^ $user_cant) - 但它不适用于白痴打样。

我对位操作还是很陌生,所以如果答案很明显,请放轻松。

我正在使用 PHP,但可接受的答案可以是任何语言/伪代码,只要它有效且易于理解。

谢谢。

0 投票
4 回答
327 浏览

c++ - 关于按位与和移位运算的问题

如果 ,以下几行究竟是如何工作的pData = "abc"

0 投票
2 回答
149 浏览

language-agnostic - 学习按位运算的资源?

最近有人问我一个问题,"how do you multiply without using the multiplication operator, without any sort of looping statements or explicit addition"并意识到我根本不熟悉按位运算。

显然有维基百科,但我需要更多针对新手的解释。还有this hack guide,但我还没有掌握它。

我不介意你指出书中的一章,因为我可以通过 Safari Books 和其他资源访问一个好的图书馆。