【发布时间】:2024-01-30 13:55:02
【问题描述】:
我正在尝试左旋转二进制值:
int left_side=0;
for (int i = 0; i < n; i++)
{
left_side = left_side | ( ( number & ( 1<<BITS-i )) >> (BITS+i+1)-n );
}
BITS表示二进制长度,n为旋转距离。
示例: 1000 ,并且 n=1 表示解为:0001。
当我旋转它(从左到右)时我不明白的一些原因,让我们以数字 253 为例,它的二进制序列是 11111101 和 n=3(距离),我的代码的结果二进制序列是 101(即 5)。
为什么答案不是 7?在这个循环中我错过了什么?
谢谢。
【问题讨论】:
-
也不要忘记您正在尝试转换 signed int。注意符号位。你不想使用
unsigned int吗? -
我无法重现您的错误结果
left_side = 5。对我来说,结果是left_side = 1(这也是错误的)。 Try it yourself.
标签: c bit-manipulation bitwise-operators