представляет 2 числа в 8 битах - PullRequest
1 голос
/ 29 ноября 2011

У меня есть 2 набора значений. Каждый из них находится в диапазоне от -50 до + 50.

Есть ли способ представить два из этих значений в одном байте? (Я работаю в C, используя Vstudio 2010). Спасибо.

Уточнение: значения являются произвольными целыми числами; то есть значения могут быть любое целое число от -50 до +50. (Итак, на вопрос дан ответ: «нет».)

Ответы [ 4 ]

9 голосов
/ 29 ноября 2011

Нет, не в 8 битах. От -50 до +50 - это 101 возможность. С двумя из них это 10201 возможностей. 8 бит только 256 комбинаций.

Для хранения двух значений от -50 до + 50 потребуется минимум 14 бит.

1 голос
/ 29 ноября 2011

Это зависит. Это зависит от нескольких вещей:

  • какие значения эти значения в диапазоне от -50 до +50 равны
  • сколько бит в байте

Если эти значения от -50 до +50 являются произвольными числами с плавающей запятой или целыми числами, вы не сможете уместить 2 из них в один байт. Является ли это так, зависит от количества бит в байте. В Visual C ++ байты 8-битные. 8 бит слишком мало для произвольных целых чисел от -50 до +50, как это объясняли другие люди. На некоторых платформах байты могут достигать 16 бит. В этом случае, очевидно, вы можете упаковать несколько целых чисел от -50 до +50 в 16 бит. AFAIK, в C / C ++ нельзя использовать числа с плавающей запятой до 16 бит или меньше.

Теперь, если эти значения от -50 до +50 не являются произвольными значениями с плавающей запятой или целыми числами, если эти значения могут быть только -50 или +50, для одного такого значения достаточно 1 бита. Если они могут быть только -50, 0 или +50, для одного такого значения достаточно 2 бит. Если они могут быть только -50, -25, 0, +25 или +50, для одного такого значения достаточно 3 бит.

Дело в том, что ответ во многом зависит от того, как сформулирован вопрос. Ваш вопрос явно не определяет значения в диапазоне от -50 до +50 в виде произвольных целых чисел или произвольных чисел с плавающей запятой, а также не подразумевает такого рода значения. Если ваш вопрос не прояснен, нет однозначного ответа, такого как yes или no, лучшее, что вы можете получить, это maybe.

0 голосов
/ 29 ноября 2011

Краткий ответ - нет.

Длинный ответ состоит в том, что на большинстве архитектур байт равен 8 битам.Половина это 4 бита.4 бита могут представлять только от -8 до 7 с использованием дополнения до двух, которое является доминирующим средством представления целых в большинстве архитектур.

0 голосов
/ 29 ноября 2011

-50 до 50 означает диапазон 100. Вам нужно в списке 7 битов представить диапазон 100 (7 бит, 128 значений, 6 бит, 64 значения).Таким образом, с 8 битами нельзя сохранять полную точность и иметь 2 числа.Если вы в порядке с потерей точности, тогда можете сделать.

...