我有一个字符数组,我想将它在二进制级别的位向右移一个?
char arr[]="This is an array";
就像上面的数组一样,将以二进制形式'110010101001110101 ......'表示在内存中。 我想要一个程序来移动整个数组?
答案 0 :(得分:1)
只需使用<<
运算符:
char arr[]="abc";
cout << *(bitset<24>*)arr << endl;
cout << (*(bitset<24>*)arr << 1) << endl;
答案 1 :(得分: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;
}
这会将每个字符向右移,然后按位OR:在前一个字符的最右边位置。
答案 2 :(得分: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
}