c#中的按位移位

时间:2012-09-11 05:41:59

标签: c# bit-manipulation bits

我有一个关于在无符号整数内移位的问题。我有两个无符号整数,比方说var1var2。我需要取var1var2位,并将它们移到最右边的位置。因此,如果var112var20x13ac8d08则会导致var2成为0xc8d0813a。任何人都可以帮我在C#中做到这一点吗?

感谢

迈克尔

2 个答案:

答案 0 :(得分:2)

试试这个:

var2 = (var2 << var1) | (var2 >> (32 - var1));

以方法形式:

uint CyclicShiftLeft(uint input,int countBits)
{
   return (input << countBits) | (input >> (32 - countBits))
}

修改

请参阅上述代码中32重要性的评论。

答案 1 :(得分:0)

首先,我不明白你的问题中var1的功能。 我也是,你没有指定要移位或更正确旋转的位数。从示例中我假设您要将12个最高有效位移动到最低有效位。 (那是var1的用途吗?)

 unsigned int var2 = 0x13ac8d08;
 unsigned int temp = (var2 >> 20) & 0xfff; // store and mask 12 bits in least significant position 
  var2 <<= 12; // shift left
  var2 &= 0xfffff00; // mask to make sure no bits dragged from lsb by shift
  var2 |= temp;

掩蔽可能不是绝对必要的,但它确实没有伤害。机器语言中的Shift命令有时可能会扩展最高或最低有效位,而您不希望这样。