我有一个字符数组,我试图按位右移>>
,然后用另一个数组右移&
,我想我对如何做有错误的想法。
我想,即使它是一个字符数组,只是声明my_array >>= 1
将转移一切,但我得到了一个错误:"error: invalid operands to binary >> (have ‘char[8]’ and ‘int’)"
我正在尝试做的逐位比较是与一个类似大小的数组初始化为所有的“0”......对于我得到的:"error: invalid operands to binary & (have ‘char *’ and ‘char *’)"
在移位和比较之前,我需要把这些数组转换成别的东西吗?
对不起,我不是很清楚......到目前为止,所有的建议都很好,我想我越来越意识到没有一个超级简单的方法来做到这一点。更具体地说,我正在尝试做的是将整个字符数组的位右移1,将右移的位添加回数组的最左侧,与另一个相同大小的数组进行逐位比较。
从技术上讲,比较不一定是数组与数组的比较...我只需要位。在尝试进行移位/比较之前,将数组转换为其他形式会更容易吗?
9条答案
按热度按时间du7egjpx1#
你必须逐个元素地变换和比较。
如果你想把从一个元素中移出的位移到下一个元素中,这就更复杂了,比如说你要右移,那么
在另一个方向上遍历阵列,因为您需要来自下一个更高槽的位。
cnh2zyt32#
你必须一个接一个地移动数组中的条目(如果你想比较其中的两个,你需要一个接一个地移动)。
如果你希望从每个字符中移走的位会被移到下一个字符中,你也需要手工处理。
如果你想要这种移位到下一个字节的行为,并且不介意让你的代码变得糟糕、不可移植和容易出错,你可以取一个指向数组的指针,将它强制转换为类似
unsigned long long *
的类型,解引用它并移位结果整数,然后再把它存储回去。但是,如果这是你想要的行为,那么你应该使用一个整数,而不是一个
char[8]
开始。(If你可以多说一些你真正想要达到的目标,这样就可能得到更有帮助的答案。)
kgsdhlau3#
如果要在数组上执行诸如移位/或/异或/与等操作,则应在循环中执行,不能直接在数组上执行。
nkkqxpd94#
kcrjzv8t5#
你只能移位数组的成员,一个char(或int)。你不能移位整个数组。移位
my_array
试图对一个数组类型(或一个char指针)执行移位操作,这是不可能的。请改为:另外,你必须小心字符,因为它们通常是有符号的,一个包含负值的字符会从左边带“1”而不是零,所以你最好使用无符号字符。
**EDIT:**上面的代码过于简单。如果你想把数组作为一个整体右移,而不仅仅是每个字节本身,那么你需要“手动”把每个LSB复制到它右边字节的MSB。按照Richard彭宁顿的答案循环。
oknrviil6#
rwqw0loc7#
我知道这是一个老主题,但我不满意的答案可用,这里是我最近写的东西,它允许您指定的位数,您可以移位,也有简单的XOR加密在它。
shstlldc8#
tvmytwxo9#
对于每个正在寻找代码片段来(逻辑地)右移字节数组 * 并实际工作 * 的人: