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))
答案 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);