0

我有一个关于在无符号整数内移动位的问题。我有两个无符号整数,比如说var1and var2。我需要取最左边的var1var2并将它们移动到最右边的位置。所以 if var1is12var2is0x13ac8d08那将导致var2成为0xc8d0813a。谁能帮助我如何在 C# 中做到这一点?

谢谢

迈克尔

4

2 回答 2

2

试试这个:

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

方法形式:

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

编辑

请参阅注释以了解32上述代码中的意义。

于 2012-09-11T05:48:35.160 回答
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;

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

于 2012-09-11T05:55:11.843 回答