c# – 如何在一个Integer中编码两个数字?

我需要存储一系列值(如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中最终读取这些值,因此无论使用哪个位编码浮点数在平台之间完全兼容,都是值得怀疑的.

最好的方法是什么?我正在考虑的一种方法是使用整数,但是将所有内容除以1000.这将在两个数字中给出3个小数点精度,但是我必须存储整个东西以存储超过65的任何东西.我’我不确定这是否是最佳方法.也许有一些我很想念的东西.

解决方法:

一点点数学可以解决这个问题.

首先修复你的精确度,比方说2位数,你的数字范围直到1000

both = Math.Round(num1, 2) * 10000 + Math.Round(num2, 2);

前4位数字用于num1,然后你有num2.

你可以让他们扭转这个过程.

上一篇:从C#传递位值


下一篇:java – 是否可以为~100个常量创建一个位掩码?