C#位运算符

C#位运算符,c#,bit-manipulation,C#,Bit Manipulation,有人能解释一下下面的代码是做什么的吗 private int ReadInt32(byte[] _il, ref int position) { return (((il[position++] | (il[position++] << 8)) | (il[position++] << 0x10)) | (il[position++] << 0x18)); } private int ReadInt32(字节[]il,参考int位置) { retur

有人能解释一下下面的代码是做什么的吗

private int ReadInt32(byte[] _il, ref int position)
{
    return (((il[position++] | (il[position++] << 8)) | (il[position++] << 0x10)) | (il[position++] << 0x18));
}
private int ReadInt32(字节[]il,参考int位置)
{

return((il[position++]|(il[position++]整数以字节数组形式给出。 然后每个字节左移0/8/16/24位,这些值相加得到整数值

这是一个十六进制格式的
Int32

0x10203040
它表示为以下字节数组(小端结构,因此字节顺序相反):

为了从数组构建回整数,每个元素都会移位,即执行以下逻辑:

a = 0x40        = 0x00000040
b = 0x30 << 8   = 0x00003000
c = 0x20 << 16  = 0x00200000
d = 0x10 << 24  = 0x10000000

整数以字节数组的形式给出。 然后每个字节左移0/8/16/24位,这些值相加得到整数值

这是一个十六进制格式的
Int32

0x10203040
它表示为以下字节数组(小端结构,因此字节顺序相反):

为了从数组构建回整数,每个元素都会移位,即执行以下逻辑:

a = 0x40        = 0x00000040
b = 0x30 << 8   = 0x00003000
c = 0x20 << 16  = 0x00200000
d = 0x10 << 24  = 0x10000000
你可以这样想:

var i1 = il[position];
var i2 = il[position + 1] << 8;  (<< 8 is equivalent to * 256)
var i3 = il[position + 2] << 16; 
var i4 = il[position + 3] << 24;

position = position + 4;

return i1 | i2 | i3 | i4;
var i1=il[位置];
var i2=il[position+1]这样想:

var i1 = il[position];
var i2 = il[position + 1] << 8;  (<< 8 is equivalent to * 256)
var i3 = il[position + 2] << 16; 
var i4 = il[position + 3] << 24;

position = position + 4;

return i1 | i2 | i3 | i4;
var i1=il[位置];

var i2=il[position+1]?我将其更改为
return((il[position]|)(il[position+1]@MatthewWatson,我同意它更有意义,但它似乎是在外部函数缓冲区上的循环中使用的,因为
position
参数是
ref int
,因此被调用方可能取决于索引的更新。尽管如此,我还是会像您一样,在end@ZdeslavVojkovic啊对,非常正确。可能
position+=sizeof(int)
会更有表现力。@MatthewWatson,没错,我完全忘了C#也有
sizeof
操作符。我会将它改为
return((il[position]|(il[position+1])@MatthewWatson,我同意它更有意义,但它似乎是在外部函数缓冲区上的循环中使用的,因为
position
参数是
ref int
,因此被调用方可能取决于索引的更新。尽管如此,我还是会像您一样,在end@ZdeslavVojkovic啊对,非常正确。可能
position+=sizeof(int)
会更有表现力。@MatthewWatson,是的,我完全忘了C#还有
sizeof
操作符。非常感谢,现在更有意义了!:)非常感谢,现在更有意义了!:)