簡體   English   中英

C#按位運算符

[英]C# Bitwise Operators

有人可以解釋下面的代碼做什么。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM