0

符号なし整数内のビットのシフトに関する質問を受けました。私は 2 つの符号なし整数を持っていvar1ますvar2。の一番左のvar1ビットを取り出して、var2一番右の位置に移動する必要があります。したがって、var1is12var2isの場合は0x13ac8d08var2なり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 に答える