Страницы

Поиск по вопросам

воскресенье, 1 марта 2020 г.

C# создание своего типа данных

#c_sharp


Мне нужен свой тип данных, размер которого будет очень мал - 4 бит. Как это реализовать?
Нужно это для более компактного хранения в памяти и на HDD чисел от 0 до 31. Использовать,
например, Byte, чтобы в его двоичном коде хранить 2 моих переменных не вариант, т.к.
мне нужны массивы с 4ех байтным типом данных
    


Ответы

Ответ 1



Для хранения чисел от 0 до 31 вам нужно 5 бит. Хранить можно в BitArray (но по факту, будет выделено все равно 1 байт): BitArray thirtyOne = new BitArray(new[] { true, true, true, true, true}); //число 31 Увы, вы не сможете создать тип, который будет занимать меньше 1 байта.

Ответ 2



По поводу вашего вопроса, меня он тоже заинтересовал, конечно все упирается в минимальное значение CLR (byte) - там еще просто стандарт SizeOf (какой-то там ISO). Но мне почему-то стало интересно, ведь есть тип данных bool, который в свою очередь просто триггер (0/1). Который по смыслу должен занимать именно 1 бит. Окей, он приводиться к byte пускай, это приведение примерно так выглядит - true = 0xFF, false = 0x0 - тут тоже действует какой-то там стандарт. Но самое интересно как оказывается начинается, с момента компиляции и интересных аттрибутов для структуры. В свою очередь я смог нагуглить интересную статью, которая дает намного больше информации по данной теме: https://habr.com/ru/post/114953/ Так как мои знания и мое осознание данной проблемы, немного не литературным языком сформированы, то и галантно описать я не могу (почитайте статью). Ко всему прочему, еще на cyberforum'e (http://www.cyberforum.ru/csharp-net/thread341534.html), есть интересный эксперимент-обсуждение по этому поводу.

Ответ 3



На основе этого примера верните нужную вам часть масива (Хоть половину значения) List List { set; get; } = default; public MyType this[int i] { get { return List[i]; } }

Комментариев нет:

Отправить комментарий