Как я могу закодировать два числа в одно целое число?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу закодировать два числа в одно целое число?

Сообщение Anonymous »

Мне необходимо хранить диапазон значений (например, 25-50 или 100-200), однако, чтобы избежать большого количества перепроектирования базы данных и другой работы, я хочу использовать один Int32 для хранения обоих этих чисел. Я понимаю, что тогда у меня будет только 16 бит для каждого числа, но это нормально.

Итак, с двумя целочисленными значениями это довольно просто. Я могу сделать что-то вроде:

Код: Выделить всё

int mask = 50; //Right bits will have 50
mask |= (25 > 16));
Console.WriteLine("Right is: {0}", (mask & 0xFFFF));
Теперь у меня есть правые 16 бит, хранящие значение 50, и левые 16 бит, хранящие значение 25.

Так в чем вопрос?

Теперь я хочу использовать ту же технику, но хочу сохранить два нецелых числа. Например, 1,5 и 1,75 или 2,00 и 2,25. .NET, похоже, не поддерживает операторы сдвига битов в числах с плавающей запятой, одинарном, двойном или десятичном. Кроме того, мне также нужно будет прочитать эти значения в конечном итоге в Javascript, поэтому сомнительно, что любая битовая кодировка с плавающей запятой будет полностью совместима между платформами.

Как лучше всего это сделать? Один из подходов, который я рассматриваю, - это просто использовать целые числа, но делить все на 1000. Это дало бы мне точность до 3 десятичных знаков в обоих числах, хотя мне пришлось бы хранить все это как long, чтобы сохранить что-либо больше 65. Хотя я не уверен, что это лучший подход. Возможно, я что-то упускаю.

Подробнее здесь: https://stackoverflow.com/questions/114 ... le-integer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»