问题标签 [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 投票
10 回答
1852 浏览

javascript - 2.9999999999999999 >> .5?

我听说您可以将数字右移 0.5 而不是使用 Math.floor()。我决定检查它的限制以确保它是合适的替代品,因此我检查了以下值并在 Google Chrome 中得到以下结果:

经过一番摆弄,我发现在 Chrome 和 Firefox 中,当右移 0.5 时,将产生 2 的最大可能值为 2.9999999999999997779553950749686919152736663818359374999999¯(重复 9)。IE中的数字是2.9999999999999997779¯。

我的问题是:数字 .0000000000000007779553950749686919152736663818359374 的意义是什么?这是一个非常奇怪的数字,它真的激起了我的好奇心。

我一直在尝试找到答案或至少某种模式,但我认为我的问题在于我真的不了解按位运算。我原则上理解这个想法,但是将位序列移动 0.5 对我来说根本没有任何意义。任何帮助表示赞赏。

为了记录,奇怪的数字序列随着 2^x 的变化而变化。以下数字中仍能正确截断的最高可能值:

0 投票
7 回答
6662 浏览

sql - 位掩码的大小是否有实际限制?

有一种常见的方法是使用位掩码将多个值存储在一个变量中。例如,如果用户对某项具有读、写和执行权限,则可以通过说将其转换为单个数字read = 4 (2^2), write = 2 (2^1), execute = 1 (2^0),然后将它们相加得到 7。

我在几个 Web 应用程序中使用了这种技术,我通常将变量存储到一个字段中,并根据不同值的数量给它一种 MEDIUMINT 或其他类型。

我感兴趣的是,您可以像这样存储的值的数量是否有实际限制?例如,如果数字超过 64,则不能再使用(64 位)整数。如果是这样的话,你会用什么?它将如何影响您的程序逻辑(即:您仍然可以使用按位比较)吗?

我知道,一旦您开始获得非常大的值集,另一种方法将是最佳解决方案,但我对这种方法的边界感兴趣。

0 投票
4 回答
2899 浏览

c# - C#中的位域

所以,位域。具体来说,大位域。我了解如何在位域中操作单个值,但是我将如何在一个大集合上执行此操作,例如:

我遇到的具体问题是在整个阵列中进行左右移位。因此,例如,如果我>> 4在上面的数组上做了一个,我最终会得到:

现在,这里的一个(过于)简单化的算法可能看起来像(这是我在运行中编写代码):

有什么内置的东西可以简化处理这类数据的工作吗?

0 投票
5 回答
2941 浏览

c++ - 如何在 C++ 中获取 char 的整数值?

我想将存储在 32 位无符号整数中的值放入四个字符中,然后将每个字符的整数值存储在一个字符串中。

我认为第一部分是这样的:

0 投票
5 回答
7975 浏览

java - 如何在 Java 中将 int 转换为三个字节?

我正在尝试将一个转换intbytes三个代表那个int(大端)。

我确信它与按位和位移有关。但我不知道该怎么做。

例如:

*注意,我知道一个 int 是 4 个字节,这三个字节有可能上溢/下溢。

0 投票
6 回答
11584 浏览

c - 需要帮助理解 K&R C 第 2 章中的“getbits()”方法

在第 2 章,关于按位运算符的部分(第 2.9 节)中,我无法理解其中一种示例方法的工作原理。

这是提供的方法:

这个想法是,对于给定的数字x,它将返回从位置p开始的n位,从右侧开始计数(最右边的位是位置 0)。给定以下方法:main()

输出是:

getbits(63892 (f994), 4, 3) = 5 (5)

我得到了其中的一部分,但在“大图”方面遇到了麻烦,主要是因为我不理解的位(不是双关语)。

我特别有问题的部分是补充部分:~(~0 << n). 我想我得到了第一部分,处理x;这是我正在努力解决的部分(然后是掩码)——以及它们是如何结合在一起来实际检索这些位的。(我已经验证了它正在做的事情,包括代码和使用 calc.exe 检查我的结果——感谢上帝,它有一个二进制视图!)

有什么帮助吗?

0 投票
12 回答
51642 浏览

numbers - 如何通过按位运算获得整数的第 N 位?

例子。123456,我们想要从右边数第三个('4')出来。

实践中的想法是分别访问每个数字(即 6 5 4 3 2 1)。

首选 C/C++/C#。

0 投票
9 回答
12030 浏览

networking - 从网络位数转换为网络掩码的最佳方法是什么?

例如,如果我有一个像 172.20.10.0/24 这样的网络规范,“24”就是比特数。将其转换为像 0xffffff00 这样的网络掩码的最佳方法是什么?

0 投票
12 回答
14050 浏览

c - 如何在不使用任何比较运算符且不使用 if、else 等的情况下以编程方式返回两个整数的最大值?

如何在不使用任何比较运算符且不使用 , 等的情况下以编程方式返回两个整数的if最大值else

0 投票
5 回答
1144 浏览

parsing - 关于如何制作可配置解析器的建议

我想为类似 C 的语言构建解析器。关于它的有趣方面是我想以这样一种方式构建它,即有权访问源代码的人可以轻松修改它以扩展语言(一种新的表达式类型的实例),扩展是运行时可配置的(它们可以是打开和关闭)。

我目前的意图是构建一个像样的递归解析器作为对象。每个产生式都将是一个对象的一个​​方法。扩展的方法是根据需要从这个基础替换方法(和生产定义)派生类。我仍在尝试弄清楚如何混合和匹配扩展。一个想法是用 v-tbl 玩游戏。对象将使用 v-tbl 构造,该 v-tbl 是基类的副本,但使用派生类替换的方法。

除了解决方案的有点混乱之外,我唯一遇到的问题是

  • 进行 v-tbl 混合的合理方法
  • 当 2 个扩展改变相同的产品时该怎么办(因为大多数替换最终会调用原来的替换调用另一个会起作用,但设置它的机制是问题)
  • 如何允许扩展扩展(这可能最终看起来像一个标准的 MI 系统,但我从来不知道它们是如何工作的)

另一种解决方案(相同方法的稍微普通的版本)是使用静态成员变量来存储函数指针并调用它们以获得相同的效果。

编辑:我已经构建了一个系统,可以让我从 BNF 定义构建产品。我可以改变它来支持我决定的任何事情。