【发布时间】:2020-06-19 19:19:12
【问题描述】:
假设我有以下四个整数:
int a = 4;
int b = 5;
int c = 6;
int d = 7;
我想将这些值存储在一个 int 中:
int whole;
我将如何使用按位/移位操作来做到这一点?我试过了:
int whole = a + (b << 8) + (c << 16) + (d << 24);
但我不确定这是否会为整体创建唯一值,因为我还想从整体中检索整数。因此,如果我有,例如,whole = 5919835,我想取回 c 的值。
【问题讨论】:
-
这不能是唯一的:你不能在 32 位中唯一地存储 128 位。
-
但是如果整数值不能放在 8 位中怎么办?你最多可以存储 256 个
-
您不能将 4 个
int存储在单个int中。您可以在int中存储 4 个整数值,但您必须将它们的范围限制为每个 8 位。 -
唯一有意义的方法是,如果您想将 4 个字节打包成一个 32 位整数。我怀疑已经有很多类似的问题了。还有一个内置函数BintConverter.ToUInt32。您可以使用BitConverter.GetBytes(UInt32) 来逆转这一点
-
推荐:
byte a = 4, b = 5, c = 6, d = 7;- 现在很明显,它们的范围允许这种用法,并且您避免了很多危险的溢出情况。
标签: c# .net bit-manipulation bit