我有一个字符数组,我想将它的二进制位在正确的方向上移动一位?
char arr[]="This is an array";
就像上面的数组会以二进制形式'110010101001110101......'在内存中表示我想要一个程序来移动整个数组?
我有一个字符数组,我想将它的二进制位在正确的方向上移动一位?
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;
}
这会将每个字符向右移动,然后在前一个字符的最右边按位或: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
}