2
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))
4

2 回答 2

4

C# 没有按位循环运算符 -过右端的位会脱落并消失。你可以做些什么来解决这个问题

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

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

于 2013-02-25T03:18:29.180 回答
2

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

我不知道 C# 中有可用的按位运算符来执行此操作,但算法很简单:

value = value & 0x1 ? (1 << Marshal.SizeOf(value) * 8 - 1) | (value >> 1) : ( value >> 1);
于 2013-02-25T03:31:08.150 回答