c#位运算符
本文关键字:运算符 | 更新日期: 2023-09-27 18:08:19
谁能解释一下下面的代码是做什么的?
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;