我有一个字符数组,我想把它的二进制位向右移动一个

I have a character array, i want to shift the bits of it at binary level in right direction by one?

本文关键字:移动 右移 一个 二进制 数组 字符 有一个      更新时间:2023-10-16

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

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

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

仅使用<<运算符:

 char arr[]="abc"; 
 cout <<   *(bitset<24>*)arr         << endl;
 cout <<  (*(bitset<24>*)arr << 1)   << endl;

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

这是一个非常像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;
}

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

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
}