按位移位char的数组

MCP*_*MCP 11 c bit-manipulation

我有一个字符数组,我试图按位向右移位>>,然后&用另一个数组.我想我对如何做到这一点有错误的想法.

我想,即使它是一个字符数组只是说明my_array >>= 1会改变一切,但我收到一个错误:"error: invalid operands to binary >> (have ‘char[8]’ and ‘int’)"

我试图做的按位比较是使用类似大小的数组启动所有"0"...为此我得到: "error: invalid operands to binary & (have ‘char *’ and ‘char *’)"

在转换和比较之前,我是否需要将这些数组转换为其他数组?

对不起,我不是很清楚...到目前为止所有很好的建议,我想我更多地意识到没有超级简单的方法来做到这一点.更具体地说,我要做的是将WHOLE字符数组的位右移1,将右移的位移回数组的最左侧,与另一个相同大小的数组进行逐位比较.

从技术上讲,比较不必是数组的数组......我只需要比特.在尝试进行转换/比较之前,将数组转换为其他内容会更容易吗?

Dan*_*her 14

你必须转移和比较元素.

for(i = 0; i < len; ++i)
    array[i] >>= 3;
Run Code Online (Sandbox Code Playgroud)

例如.如果你想将从一个元素移出的位移动到下一个元素,那就更复杂了,比如你向右移动,然后

unsigned char bits1 = 0, bits2 = 0;
for(i = len-1; i >= 0; --i) {
    bits2 = array[i] & 0x07;
    array[i] >>= 3;
    array[i] |= bits1 << 5;
    bits1 = bits2;
}
Run Code Online (Sandbox Code Playgroud)

因为你需要来自下一个更高插槽的位,所以在另一个方向上遍历数组.