Подтвердить что ты не робот

Почему не размер данных типа bool только 1 бит в С#?

Я просто изучаю С# и глубже погружаюсь в типы данных.

Почему размер bool типа 1 бит не равен?

Кажется, что он может содержать только одно из двух значений (true или false), так что бы это не заняло только 1 бит пространства для представления этого значения?

Это потому, что наименьший "адресуемый" размер значения представляет собой байт (8 бит), как указано в этом сообщении?

Моя общая цель состояла в том, чтобы логически предусмотреть различный размер каждого типа данных в С#, поэтому я пытался создать список всех типов данных и их размер выделенного бита, и это меня бросило.

4b9b3361

Ответ 1

Это потому, что наименьший "адресуемый" размер значения представляет собой байт

Да, точно то же самое. Для того, чтобы среда CLR была эффективной, она сопоставляет свои типы данных с нативными машинными типами данных во многом так же, как это делает компилятор на С++ (в значительной степени).

Ответ 2

Если вы хотите хранить много флагов экономичным способом, рассмотрите возможность использования Int32 или Int64 в качестве битовой маски, таким образом вы можете хранить 32 или 64 булевых флага в 32/64-битном типе данных. Вы должны выполнить битмакс-тесты, чтобы проверять или устанавливать значения, поэтому есть небольшая добавочная стоимость для доступа или обновления по булевой переменной.

Размер булевого поля в памяти равен 1 байту, а булевой переменной - 4 байта.

BitArray также удобен для обработки множества бит-флагов: http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx

Ответ 3

Я тоже это заметил... Я создал два массива: float [4000] и float? [4000]. Второй массив занимает в два раза больше места памяти, потому что float? реализуется как float и bool, а bool заканчивается тем, что принимает 32 бита так же, как и float.

Итак, в конце, если использование памяти является проблемой, использование значения float NaN для представления "null" в float [] лучше, чем использование float? [].

Заставляет меня чувствовать себя идиотом за все годы, когда я пытался использовать меньшие типы данных, полагая, что это на самом деле неплохо!: -)