问题标签 [bitcount]
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.
java - Long.bitCount() 如何找到设置的位数?
我知道这是代码。但我无法理解它的作用
java - Java - bitCount() 的大 O?
比特数的大 O 是多少?我不确定该方法是如何工作的,但我认为它是在 O(logn) 中完成的。
特别是使用此代码(其中 x = 4,y = 1):
binary - 计算 Redshift 列中每个位位置的“1”值的数量
我的 Redshift 表中有 BIGINT 列,我想要一个查询:
- 计算该列所有行中二进制值的每个位位置出现值“1”的次数
- 将以一种我能够获取x最高位位置的方式显示它。
例如(我已经将整数值写为二进制以简化示例):
将返回如下表:
在这种情况下,我将能够获得前五位 bit_position:(3,4,6,7,2)
注意:我的列可能最多有 64 个位位置。
assembly - 使用 AVX-512 或 AVX-2 对大数据计数 1 位(人口计数)
我有一大块内存,比如 256 KiB 或更长。我想计算整个块中 1 的位数,或者换句话说:将所有字节的“人口计数”值相加。
我知道 AVX-512 有一条VPOPCNTDQ 指令,它计算 512 位向量中每个连续 64 位中 1 的位数,而 IIANM 应该可以在每个周期发出其中一个(如果适当的 SIMD 向量寄存器是可用) - 但我没有任何编写 SIMD 代码的经验(我更像是一个 GPU 人)。此外,我不是 100% 确定编译器对 AVX-512 目标的支持。
在大多数 CPU 上,仍然不(完全)支持 AVX-512;但 AVX-2 已广泛使用。我无法找到类似于 VPOPCNTDQ 的小于 512 位的矢量化指令,所以即使理论上我也不确定如何使用支持 AVX-2 的 CPU 快速计算位数;也许存在这样的东西,而我只是以某种方式错过了它?
无论如何,我很欣赏一个简短的 C/C++ 函数 - 使用一些内部包装库或内联汇编 - 对于两个指令集中的每一个。签名是
笔记:
- 与如何在 Sandy Bridge 上的一系列 int 中快速将位计数到单独的 bin 中?,但不是骗子。
- 如果这很重要,我们可以假设输入是对齐的。
- 忘记多个内核或套接字,我想要单个(单个线程上的)内核的代码。
bit-manipulation - 矩阵转置和人口计数
我有一个大小为 N 的方形布尔矩阵 M,按行存储,我想计算每列设置为 1 的位数。
例如对于 n=4:
我显然可以
- 将矩阵 M 转置为矩阵 M'
- popcount M' 的每一行。
存在通过位操作进行矩阵转置和弹出计数的良好算法。
我的问题是:是否有可能将这些算法“合并”成一个单一的算法?
请注意,对于 64 位架构,N 可能非常大(比如 1024 或更多)。
java - Java 中 Long 变量的 XOR 操作和 BitCount 返回 java.lang.NumberFormatException
我正在尝试对 Java 中的两个 64 位 Long 变量进行 XOR 操作。问题是当我在变量中添加超过 16 位时它会失败。
例如,这有效并返回 7:
如果我将 h1 和 h2 的值增加到:
我收到一个错误:
线程“主”java.lang.NumberFormatException 中的异常:对于输入字符串:“11000110000110100110101101001101”
在
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
在 java.lang.Long.parseLong(Long.java:592)
在java.lang.Long.parseLong(Long.java:631)
如果我将它加倍(我想要计算的 64 位)也是一样的:
关于为什么在 16 位以上失败的任何帮助?