0

我有一个字符数组,我想将它的二进制位在正确的方向上移动一位?

char arr[]="This is an array";

就像上面的数组会以二进制形式'110010101001110101......'在内存中表示我想要一个程序来移动整个数组?

4

3 回答 3

1

只需使用<<运算符:

 char arr[]="abc"; 
 cout <<   *(bitset<24>*)arr         << endl;
 cout <<  (*(bitset<24>*)arr << 1)   << endl;
于 2013-05-02T13:28:34.500 回答
0

假设您希望位在字符之间移动,最好从最后开始。

这是一个非常类似于 C 的解决方案:

for( size_t i = strlen(arr) - 1; i; --i )
{
  arr[i] = arr[i] >>= 1;
  if( i > 0 )
    arr[i] |= (arr[i - 1] & 1) << 7;
}

这会将每个字符向右移动,然后在前一个字符的最右边按位或:s。

于 2013-05-02T11:52:48.270 回答
0
for (size_t i = n; i > 0; i--)
{
    bool b = v[i-1] & 1;   // (1) is bottom bit on?

    v[i-1] >>= 1;          // (2) shift 1 bit to the right
    if (b && i < n)        // (3) if bottom bit was on and not last byte
        v[i] |= (1 << 7);  //        switch on top bit of following
}
于 2013-05-02T11:52:52.083 回答