我有一个字符数组,我想把它的二进制位向右移动一个
I have a character array, i want to shift the bits of it at binary level in right direction by one?
我有一个字符数组,我想把它的二进制位在正确的方向上移动一个?
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
}
相关文章:
- 右移布尔值在C++
- 何时右移操作>>移位符号位,何时不?
- 这个右移是如何工作的:字符串流>>无符号的int>>无符号的int?
- C++中的负数右移运算符
- C++ 尝试将数字右移 32 会得到两种不同的结果
- 对已签名数据进行逻辑右移
- 右移速度与左移相同的速度测试位
- 右移无法正常工作
- 为什么将 int a=1 移到左 31 位然后向右移 31 位,它变成 -1
- 当 b 大于 a 中的位数时右移(a >> b)的未定义行为?
- 为什么无符号的 int 右移总是用"1"填充
- 重载左移和右移运算符(cin和cout)
- 在c++中,取一个整数数组(arr[])、其长度(N)和元素数右移(M):
- 右移g++时出现意外结果
- 如果计数大于类型的宽度,则为右移未定义的行为
- 使用左移或右移计算对数基数 n
- static_assert签名的右移具有两个补码行为是否合法?
- 在C/C++中,左移或右移零点实际上会生成一条指令
- C++中的右移产生异常结果(无符号64位)
- 关于右移运算符>>C++