c - 按位移位字符数组

标签 c bit-manipulation

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

我想,即使它是一个字符数组,只是声明 my_array >>= 1 会改变所有内容,但我收到错误:“错误:二进制操作数无效>> (有'char[8]'和'int')”

我想要做的按位比较是使用一个类似大小的数组来初始化所有“0”...为此我得到:“错误:二进制 & 的操作数无效(有 'char *'和'char *')”

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

抱歉,我不是很清楚......到目前为止,所有很好的建议,我想我更多地意识到没有 super 简单的方法可以做到这一点。更具体地说,我想做的是将整个 char 数组的位右移 1,将从右侧移回的位添加到数组的最左侧,与另一个相同大小的数组进行按位比较。

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

最佳答案

您必须按元素进行移位和比较。

for(i = 0; i < len; ++i)
    array[i] >>= 3;
例如。如果你想将一个元素移出的位移到下一个元素,那就更复杂了,假设你要右移,那么

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;
}

以另一个方向遍历数组,因为您需要来自下一个较高槽的位。

关于c - 按位移位字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55945954/

相关文章:

c - 即使我在 C 编程中正确输入代码,if 条件也会出错

c - "#define for if (false) {} else for"的可能用途是什么?

python - 在数组中执行按位左移操作时超出整数限制

c - 如何知道C编程中的do while循环

c - 如何解决不兼容指针类型的初始化

c++ - 偏最小二乘库

python - 随机翻转python二进制字符串中的位

c - 处理枚举按位大小大于 64

swift - 如何 swift 将 Int16 转换为两个 UInt8 字节

prolog - 在 SICStus Prolog 中使用 CLMUL