Другие языки программирования и технологии

зачем на тип данных bool (и эквивалентные ему в разные языках) выделяется целых 8 бит, если достаточно 1 бита?

Ruslan Horoshiy
Ruslan Horoshiy
3 937
Затем что минимальная единица с которой работает процессор - байт, а не бит. Т. е. вы вполне можете использовать 1 байт для хранения 8 переменных, но это усложнить код. Таким образом, получив выигрыш в 1 байт оперативной памяти вы проиграете в несколько лишних команд процессорного времени. Если на более старых компьютерах это могло иметь смысл, то сейчас это бессмысленно.
Александр Волков
Александр Волков
1 160
Лучший ответ
Ruslan Horoshiy с помощью дописания к переменной ":(1-8)"?
Для быстроты обработки. Отдельные переменные базовых типов всё равно много места не занимают.
А в массивах часто и один бит. В Паскале множества, по сути, являются битовыми массивами. В С есть битовые структуры. В C++ есть булевские векторы с хранением битов по 8 в байте.
Ильнар Ruazapov
Ильнар Ruazapov
69 214
В С++ этого можно добиться побитовыми операциями:

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
Т*
Тольчик *****
44 389
Потому что минимальная адресуемая память - это байт.
С=
Славян =))
21 943