我有一个关于在无符号整数内移位的问题。我有两个无符号整数,比方说var1
和var2
。我需要取var1
个var2
位,并将它们移到最右边的位置。因此,如果var1
为12
而var2
为0x13ac8d08
则会导致var2
成为0xc8d0813a
。任何人都可以帮我在C#中做到这一点吗?
感谢
迈克尔
答案 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命令有时可能会扩展最高或最低有效位,而您不希望这样。