我有一个字符数组,我试图将其按位右移 >>
,然后用另一个数组 &
。我想我对如何做到这一点的想法是错误的。
我想,即使它是一个字符数组,只是声明 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/