c - 获取数组中每个 int 的 LSB 并将它们组合起来创建一个字节

标签 c bitwise-operators

所以现在我有这个

unsigned char getlsbs(unsigned char *p){
    int r;
    unsigned char newByte, temp;
    newByte = 0;

    for(r = 0; r < 8; r++){
            temp = p[r];
            temp &= -temp; // Gets the LSB of p[r]
            ((newByte & (1 << r)) >> r) |= temp; //This line does not work
    }
    return newByte;
}

对于不起作用的行,我试图将 newByte 的第 rth int 设置为 LSD,这样我就可以将 00000000 变成类似 10100001 的值,任何帮助将不胜感激

最佳答案

您不能分配给表达式。为了简化问题:a + 1 = b 不起作用。将其重写为 a = b - 1

我会这样做:

for(r = 0; r < 8; r++){
    newByte |= (p[r] & 1) >> r;
}

关于c - 获取数组中每个 int 的 LSB 并将它们组合起来创建一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33771938/

相关文章:

c - 在 linux c 中使用按键打破循环

c++ - stringstream code separating words - 这东西是怎么工作的?里面的代码片段

检查 MPI 中的进程数是否为 2 的幂

c++ - 我可以在一个循环中使用 2 个循环语句吗?

c - 如果 x*x 可以容纳 32 位整数,如何返回 1,否则返回 0?

java - 一条线上的多个分配未按预期工作

java - 为什么 ArrayDeque 类在 pollFirst 方法中使用按位运算?

c - 在递归函数中使用堆栈

c - 什么是字节?

c - mman.h 确实导入了 mmap 函数但未能导入 mremap