【发布时间】:2013-04-10 10:05:52
【问题描述】:
谁能解释一下以下代码的作用。
private int ReadInt32(byte[] _il, ref int position)
{
return (((il[position++] | (il[position++] << 8)) | (il[position++] << 0x10)) | (il[position++] << 0x18));
}
我不确定我是否理解这种方法中的位运算符是如何工作的,能否请一些人为我分解一下?
【问题讨论】:
-
我会把它改成
return (((il[position] | (il[position+1] << 8)) | (il[position+2] << 0x10))(不回答问题,有人已经这样做了,只是position++的东西很难阅读而且没有必要) -
@MatthewWatson,我同意它更有意义,但它似乎是在来自外部函数的缓冲区上的循环中使用的,因为
position参数是ref int所以被调用者可能取决于正在更新的索引。不过,我会像你一样做,只需在末尾添加pos += 4 -
@ZdeslavVojkovic 啊,是的,完全正确。可能
position += sizeof(int)会更有表现力。 -
@MatthewWatson,对,我完全忘记了 C# 也有
sizeof运算符。
标签: c# bit-manipulation