C# 逆位运算符
我做了一个很好的搜索,浪费了几个小时的时间,我不能做一个简单的反转:( 我有一个从文件中读取值(UInt16)的现有代码,并将位移到该文件中。我试图做的是将其反转,以便使用上面的现有代码保存和读取 我读过《比特变换》和这篇伟大的文章,但也可能是拉丁文C# 逆位运算符,c#,vb.net,bit-manipulation,C#,Vb.net,Bit Manipulation,我做了一个很好的搜索,浪费了几个小时的时间,我不能做一个简单的反转:( 我有一个从文件中读取值(UInt16)的现有代码,并将位移到该文件中。我试图做的是将其反转,以便使用上面的现有代码保存和读取 我读过《比特变换》和这篇伟大的文章,但也可能是拉丁文 UInt16 tt = 12123; //10111101011011 int aa = tt >> 8 & 0xFF; //101111 = 47 8位消失。您永远无法将其取回。如果您有二进制110110中的值54 如果移位
UInt16 tt = 12123; //10111101011011
int aa = tt >> 8 & 0xFF; //101111 = 47
8位消失。您永远无法将其取回。如果您有二进制110110中的值54 如果移位54>>2,则会将位向右移动 00110110
0001011(换班一次)
00001101(两班)
结果是13。如果你向左移动13。13问题是什么?如何从
结果中获取值?如果是,为什么不值=结果值保存在一个已经位移的文件中。我希望能够保存相同的值。如果我只移动>8&HFF,你就得不到相同的值。@Dmitry:这对重建不起作用ngVALUE
。OP中的代码获取16位字的较高字节。您无法从8中重建16位,您还需要知道较低字节:VALUE=较高,您不能(完全)重建)与此相反。因为在@Orifjon操作过程中,原始值的某些部分丢失了,也许他应该尝试将UInt16读取为Uint32。这样他就不会丢失一点。值>>8
字面上相当于说“除以2,八次,忽略其余部分。”
UInt16 tt = 12123; //10111101011011
int aa = tt >> 8 & 0xFF; //101111 = 47