uint中的按位移位

时间:2013-02-25 03:14:38

标签: c# c#-4.0 c#-3.0 bitwise-operators bit-shift

uint number = 0x418  in bits : 0000010000011000
uint number1 = 0x8041 in bits: 1000000001000001
uint number2 = 0x1804 in bits: 0001100000000100

我不能用

获得0x8041
   number >> 4;

   (number >> 4) & 0xffff;

如何通过移位从0x418获得0x8041和0x1804?

(number >> nbits) | (number << (16 - nbits))

2 个答案:

答案 0 :(得分:4)

C#没有按位旋转运算符 - 位移位经过右端刚刚脱落并消失。你可以做些什么来解决这个问题

(number >> nbits) | (number << (32 - nbits))

将右移一个32位无符号整数nbits位。

答案 1 :(得分:2)

您所描述的内容通常称为“旋转”,而非“移动”。在汇编(x86)中,这是通过ROR和ROL指令公开的。

我不知道C#中有一个按位运算符可以做到这一点,但算法很简单:

value = value & 0x1 ? (1 << Marshal.SizeOf(value) * 8 - 1) | (value >> 1) : ( value >> 1);