C ++: почему длина bool 8 бит?

В C ++ мне интересно, почему тип bool имеет длину 8 бит (в моей системе), где достаточно только одного бита для хранения логического значения?

Раньше я считал, что это для производительности. причины, но тогда на 32-битной или 64-битной машине, где регистры имеют ширину 32 или 64 бита, в чем преимущество производительности?

Или это только одна из этих «исторических» причин?

127
задан fjellfly 16 November 2015 в 08:17
поделиться

4 ответа

Поскольку каждый тип данных C ++ должен быть адресатен.

Как бы вы создали указатель на один бит? Вы не можете. Но вы могут создать указатель на байт. Таким образом, логический в C ++ обычно байт. (Это может быть также больше. Это зависит от реализации. Главное, что он должен быть удовлетворенным, поэтому No C ++ DataType может быть меньше, чем байт)

216
ответ дан 24 November 2019 в 00:44
поделиться

Память байт адресуется. Вы не можете обратиться к одному биту, не смеявшись или замаскируя байт, прочитанный из памяти. Я бы представлял, что это очень большая причина.

38
ответ дан 24 November 2019 в 00:44
поделиться

Необходимо использовать селектор .class .

// select every <select> element with classname "yourclassname"
$('select.yourclassname').each(function() {
    // $(this) now refers to one specific <select> element
    // we append an option to it, like you asked for
    $(this).append(
        $('<option value="foo">Bar</option>');
    );
});

Для получения дополнительной информации о правильном выборе элементов с помощью jQuery см. http://docs.jquery.com/Selectors .

-121--3255140-

Потому что тогда вы узнаете новый язык, что означает более широкий набор навыков и другой способ рассмотрения проблем. Но поскольку Groovy и Scala работают на JVM и вы знаете Java, вы можете интегрировать существующие библиотеки и код, если вы хотите или нужно.

-121--3808442-

Ответы о 8-битах, которые являются наименьшим объемом адресуемой памяти, верны. Однако некоторые языки могут использовать 1-бит для boolean в путь. Кажется, я помню, как Паскаль реализует наборы как битовые последовательности. То есть для следующего набора:

{1, 2, 5, 7}

Вы можете иметь это в памяти:

01100101

Вы, конечно, можете сделать что-то подобное в C/C + +, если хотите. (Если вы держите в треке кучу булей, это может иметь смысл, но это действительно зависит от ситуации.)

6
ответ дан 24 November 2019 в 00:44
поделиться

A Boolean Тип обычно следует самому наименьшему блоку адресуемой памяти целевой машины (I.e. Обычно 8 бит).

Доступ к памяти всегда находится в «кусках» (множество слов, это для эффективности на уровне оборудования , транзакции на автобусах): булевой бит не может быть адресована «в одиночку» в большинстве систем ЦП. Конечно, после того, как данные содержатся в регистре , часто бывают специализированные инструкции для манипулирования битами независимо.

По этой причине довольно распространено использование методов битовой упаковки », чтобы повысить эффективность использования« логических »типов базовых данных. Техника, такая как Enum (в C) с мощностью 2 кодирования, является хорошим примером. Тайный трюк встречается на большинстве языков.

Обновлено : Благодаря отличному обсуждению было доведено до моего внимания, что SIZEOF (CHAR) == 1 по определению в C ++. Следовательно, адресация «логического» типа данных довольно привязана к наименьшему блоку адресуемой памяти (усиливает мою точку зрения).

20
ответ дан 24 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: