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 的值。
您可以压缩a,b,c和d成一个单一的int,如果所有a,b,c和d都在一个范围内[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)