Другие языки программирования и технологии
зачем на тип данных bool (и эквивалентные ему в разные языках) выделяется целых 8 бит, если достаточно 1 бита?
Затем что минимальная единица с которой работает процессор - байт, а не бит. Т. е. вы вполне можете использовать 1 байт для хранения 8 переменных, но это усложнить код. Таким образом, получив выигрыш в 1 байт оперативной памяти вы проиграете в несколько лишних команд процессорного времени. Если на более старых компьютерах это могло иметь смысл, то сейчас это бессмысленно.
Ruslan Horoshiy
с помощью дописания к переменной ":(1-8)"?
Для быстроты обработки. Отдельные переменные базовых типов всё равно много места не занимают.
А в массивах часто и один бит. В Паскале множества, по сути, являются битовыми массивами. В С есть битовые структуры. В C++ есть булевские векторы с хранением битов по 8 в байте.
А в массивах часто и один бит. В Паскале множества, по сути, являются битовыми массивами. В С есть битовые структуры. В C++ есть булевские векторы с хранением битов по 8 в байте.
В С++ этого можно добиться побитовыми операциями:
char a(0); // Переменная 1 байт равная нулю.
a |= 1 << 2; // Установить 3-ий бит в истину.
a &= ~(1 << 7); // Установить последний бит в ложь.
if (a & 1) {} // Если первый бит истина.
if (a & (1 << 5)) {} // Если шестой бит истина.
if (!(a & (1 << 1))) {} // Если второй бит ложь.
Существует вариант с битовыми полями структуры:
struct bool8
{
bool _0 : 1;
bool _1 : 1;
bool _2 : 1;
bool _3 : 1;
bool _4 : 1;
bool _5 : 1;
bool _6 : 1;
bool _7 : 1;
} a; // Структура в которой каждое логическое поле занимает 1 бит.
a._0 = 1; // Установить первый бит в истину.
a_3 = 0; // Установить четвёртый бит в ложь.
Однако все операции будут в последствии так же заменены побитовыми операциями, самим компилятором.
Еще существует специальный класс bitset:
https://msdn.microsoft.com/ru-ru/library/2f93c55z.aspx
char a(0); // Переменная 1 байт равная нулю.
a |= 1 << 2; // Установить 3-ий бит в истину.
a &= ~(1 << 7); // Установить последний бит в ложь.
if (a & 1) {} // Если первый бит истина.
if (a & (1 << 5)) {} // Если шестой бит истина.
if (!(a & (1 << 1))) {} // Если второй бит ложь.
Существует вариант с битовыми полями структуры:
struct bool8
{
bool _0 : 1;
bool _1 : 1;
bool _2 : 1;
bool _3 : 1;
bool _4 : 1;
bool _5 : 1;
bool _6 : 1;
bool _7 : 1;
} a; // Структура в которой каждое логическое поле занимает 1 бит.
a._0 = 1; // Установить первый бит в истину.
a_3 = 0; // Установить четвёртый бит в ложь.
Однако все операции будут в последствии так же заменены побитовыми операциями, самим компилятором.
Еще существует специальный класс bitset:
https://msdn.microsoft.com/ru-ru/library/2f93c55z.aspx
Потому что минимальная адресуемая память - это байт.
Похожие вопросы
- Зачем и для чего нужен тип данных bool в C++? Пожалуйста, объясните развёрнутым ответом. Заранее спасибо.
- В 1 байте 8 бит....Байт - единица хранения и обработки цифровой информации.
- Почему 1 байт состоит из 8 бит?Не из 7 и не из 9?
- Зачем придумали, чтоб 1 байт = 8 битам?!?!Че нельзя было чтоб = 10битам?
- Музыка "8 бит"... Какая у неё должна быть частота?
- Почему в байте именно 8 бит, а не 10 ,например, или 7?
- Почему в Байте 8 бит?? Чёт не могу додуматься.. помогите если знаете
- Такой вопрс: Почему самое минимальное количество информации равно 8 Бит?
- Что имеется ввиду под 4 байтами у типа данных int?(С++)
- Есть ли в программировании основные (фундаментальные) типы данных, от которых берут начало другие типы?