c++ - 垂直按位计数(同一位置上的总和)

标签 c++ c algorithm bit-manipulation

有没有什么有效的方法可以在多个变量中对同一位置进行 COUNT?计数函数应该用相应位数的总和填充数组。例如,我们有以下三个变量(为了简单起见,我使用 8 位变量):

uint8_t a = 0xF;  // 0000 1111
uint8_t b = 0x3C; // 0011 1100
uint8_t c = 0xF0; // 1111 0000

int result[8];

// some operations ...

count << result[0] << result[1] << .... // prints 1122 2211

我找到了很多求和整个单个变量的解决方案,但没有找到上述问题。

最佳答案

这段小代码完全可以满足您的需求。您可以通过一个小查找数组轻松扩展它以支持 N 个变量。注意双非操作的使用。它是将输出拖到 0 或 1。

#include <iostream>

using namespace std;

int main() {
    uint8_t a = 0xF;  // 0000 1111
    uint8_t b = 0x3C; // 0011 1100
    uint8_t c = 0xF0; // 1111 0000

    unsigned result[8];
    for(int i = 0; i < 8; ++i) {
        unsigned mask = 1 << i;
        result[i] = !!(a & mask) + !!(b & mask) + !!(c & mask);
    }

    for(int i = 0; i < 8; ++i)
        cout << result[i];
}

关于c++ - 垂直按位计数(同一位置上的总和),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35804222/

相关文章:

arrays - 查找数组中指定元素的第一次出现

c++ - 动态数组打印函数

C SECCOMP 阻塞或关闭 STDIN/STDOUT

algorithm - 二进制到十进制(大数)

python - NumPy C API : Link several object files

c++ - 引用如何出现在可从 C 代码调用的函数的签名中?

algorithm - 汉诺塔的复杂性?

c++ cli 时间跨度格式不起作用

c++ - 在类声明中定义静态变量时未解析的外部符号

c++ - 使用 Visual Studio 2013 直接从 std::ostringstream 获取 const char * 时出现意外结果