我需要存储一系列值(例如 25-50 或 100-200),但是为了避免大量的数据库重新设计和其他工作,我想使用单个 Int32
来存储这两个数字。我意识到每个数字只有 16 位,但这没关系。
因此,使用两个整数值这很容易。我可以做类似的事情:
int mask = 50; //Right bits will have 50
mask |= (25 << 16); //Left bits will have 25
Console.WriteLine("Mask is: {0}", mask);
Console.WriteLine("Left is: {0}", (mask >> 16));
Console.WriteLine("Right is: {0}", (mask & 0xFFFF));
现在,右 16 位存储值 50,左 16 位存储值 25。
那么问题是什么?
现在,我想使用相同的技术,但我想存储两个非整数。例如,1.5 和 1.75,或 2.00 和 2.25。 .NET 似乎不支持 float
、single
、double
或 decimal
上的移位运算符。 另外,我最终还需要在 Javascript 中读取这些值,因此无论 float 使用的位编码是否在平台之间完全兼容都是值得怀疑的。
执行此操作的最佳方法是什么?我正在考虑的一种方法是只使用整数,但将所有内容除以 1000。这将使我在两个数字中得到 3 个小数点精度,尽管我必须将整个数字存储为 long
以存储任何超过 65 的东西。不过我不确定这是否是最好的方法。也许我缺少一些简单的东西。
最佳答案
一点点数学就可以解决这个问题。
首先确定你的精度,比如 2 位数,你的数字范围到 1000
both = Math.Round(num1, 2) * 10000 + Math.Round(num2, 2);
前 4 位数字用于 num1,然后是 num2。
您可以通过逆转过程让他们回来。
关于c# - 如何在单个整数中编码两个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11439796/