如何在一个 int (C#) 中唯一存储 4 个 int?

use*_*127 0 .net c# bit-manipulation bit

假设我有以下四个整数:

int a = 4;
int b = 5;
int c = 6;
int d = 7;
Run Code Online (Sandbox Code Playgroud)

我想将这些值存储在一个 int 中:

int whole;
Run Code Online (Sandbox Code Playgroud)

我将如何使用按位/移位操作来做到这一点?我试过:

int whole = a + (b << 8) + (c << 16) + (d << 24);
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否会为整体创建唯一值,因为我也想从整体中检索整数。因此,例如,如果我有整个 = 5919835,我想取回 c 的值。

Dmi*_*nko 5

您可以压缩abcd成一个单一的int,如果所有abcd都在一个范围内[0..255],即如果它们实际上是byteS:

 int whole = unchecked(a | (b << 8) | (c << 16) | (d << 24));
Run Code Online (Sandbox Code Playgroud)

注意unchecked(当d > 127你可以有整数溢出,因为int是有符号整数)。从技术上讲,+可以,但|(按位或)似乎更具可读性。

逆转:

a = whole & 0xFF;
b = (whole >> 8) & 0xFF;
c = (whole >> 16) & 0xFF;
d = (whole >> 24) & 0xFF;
Run Code Online (Sandbox Code Playgroud)