C#按位运算符

有人可以解释下面的代码是做什么的。

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

我不确定我是否明白这种方法中的按位运算符是如何工作的,有人可以为我分解它吗?


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

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

0x10203040

它被表示为以下字节数组(小端序结构,所以字节的顺序相反):

[0x40, 0x30, 0x20, 0x10]

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

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

那么这些值一起被“或”

int result = a | b | c | d;

this gives:

0x00000040 |
0x00003000 | 
0x00200000 |
0x10000000 |
------------------
0x10203040

像这样想:

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;
链接地址: http://www.djcxy.com/p/36375.html

上一篇: C# Bitwise Operators

下一篇: = bitwise OR and assign example