问题标签 [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.
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 的变化而变化。以下数字中仍能正确截断的最高可能值:
sql - 位掩码的大小是否有实际限制?
有一种常见的方法是使用位掩码将多个值存储在一个变量中。例如,如果用户对某项具有读、写和执行权限,则可以通过说将其转换为单个数字read = 4 (2^2), write = 2 (2^1), execute = 1 (2^0)
,然后将它们相加得到 7。
我在几个 Web 应用程序中使用了这种技术,我通常将变量存储到一个字段中,并根据不同值的数量给它一种 MEDIUMINT 或其他类型。
我感兴趣的是,您可以像这样存储的值的数量是否有实际限制?例如,如果数字超过 64,则不能再使用(64 位)整数。如果是这样的话,你会用什么?它将如何影响您的程序逻辑(即:您仍然可以使用按位比较)吗?
我知道,一旦您开始获得非常大的值集,另一种方法将是最佳解决方案,但我对这种方法的边界感兴趣。
c# - C#中的位域
所以,位域。具体来说,大位域。我了解如何在位域中操作单个值,但是我将如何在一个大集合上执行此操作,例如:
我遇到的具体问题是在整个阵列中进行左右移位。因此,例如,如果我>> 4
在上面的数组上做了一个,我最终会得到:
现在,这里的一个(过于)简单化的算法可能看起来像(这是我在运行中编写代码):
有什么内置的东西可以简化处理这类数据的工作吗?
c++ - 如何在 C++ 中获取 char 的整数值?
我想将存储在 32 位无符号整数中的值放入四个字符中,然后将每个字符的整数值存储在一个字符串中。
我认为第一部分是这样的:
java - 如何在 Java 中将 int 转换为三个字节?
我正在尝试将一个转换int
为bytes
三个代表那个int
(大端)。
我确信它与按位和位移有关。但我不知道该怎么做。
例如:
*注意,我知道一个 int 是 4 个字节,这三个字节有可能上溢/下溢。
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 检查我的结果——感谢上帝,它有一个二进制视图!)
有什么帮助吗?
numbers - 如何通过按位运算获得整数的第 N 位?
例子。123456,我们想要从右边数第三个('4')出来。
实践中的想法是分别访问每个数字(即 6 5 4 3 2 1)。
首选 C/C++/C#。
networking - 从网络位数转换为网络掩码的最佳方法是什么?
例如,如果我有一个像 172.20.10.0/24 这样的网络规范,“24”就是比特数。将其转换为像 0xffffff00 这样的网络掩码的最佳方法是什么?
c - 如何在不使用任何比较运算符且不使用 if、else 等的情况下以编程方式返回两个整数的最大值?
如何在不使用任何比较运算符且不使用 , 等的情况下以编程方式返回两个整数的if
最大值else
?
parsing - 关于如何制作可配置解析器的建议
我想为类似 C 的语言构建解析器。关于它的有趣方面是我想以这样一种方式构建它,即有权访问源代码的人可以轻松修改它以扩展语言(一种新的表达式类型的实例),扩展是运行时可配置的(它们可以是打开和关闭)。
我目前的意图是构建一个像样的递归解析器作为对象。每个产生式都将是一个对象的一个方法。扩展的方法是根据需要从这个基础替换方法(和生产定义)派生类。我仍在尝试弄清楚如何混合和匹配扩展。一个想法是用 v-tbl 玩游戏。对象将使用 v-tbl 构造,该 v-tbl 是基类的副本,但使用派生类替换的方法。
除了解决方案的有点混乱之外,我唯一遇到的问题是
- 进行 v-tbl 混合的合理方法
- 当 2 个扩展改变相同的产品时该怎么办(因为大多数替换最终会调用原来的替换调用另一个会起作用,但设置它的机制是问题)
- 如何允许扩展扩展(这可能最终看起来像一个标准的 MI 系统,但我从来不知道它们是如何工作的)
另一种解决方案(相同方法的稍微普通的版本)是使用静态成员变量来存储函数指针并调用它们以获得相同的效果。
编辑:我已经构建了一个系统,可以让我从 BNF 定义构建产品。我可以改变它来支持我决定的任何事情。