Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Логический тип

#![allow(unused)]
fn main() {
let b: bool = true;
}

Логический тип или bool — это примитивный тип данных, который может принимать одно из двух значений, называемых true (истина) и false (ложь).

Значения этого типа могут быть созданы с помощью выражения-литерала с использованием ключевых слов true и false, соответствующих значениям с теми же именами.

Этот тип является частью прелюдии языка с именем bool.

Объект с логическим типом имеет размер и выравнивание по 1 байту каждый.

Значение false имеет битовый шаблон 0x00, а значение true имеет битовый шаблон 0x01. Неопределенное поведение — для объекта с логическим типом иметь любой другой битовый шаблон.

Логический тип является типом многих операндов в различных выражениях:

Note

Логический тип ведет себя похоже, но не является перечислимым типом. На практике это в основном означает, что конструкторы не связаны с типом (например, bool::true).

Как и все примитивы, логический тип реализует трейты Clone, Copy, Sized, Send и Sync.

Note

Смотрите документацию стандартной библиотеки для библиотечных операций.

Операции над логическими значениями

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

Логическое НЕ

b!b
truefalse
falsetrue

Логическое ИЛИ

aba | b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

Логическое И

aba & b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

Логическое исключающее ИЛИ

aba ^ b
truetruefalse
truefalsetrue
falsetruetrue
falsefalsefalse

Сравнения

aba == b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsetrue
aba > b
truetruefalse
truefalsetrue
falsetruefalse
falsefalsefalse
  • a != b эквивалентно !(a == b)
  • a >= b эквивалентно a == b | a > b
  • a < b эквивалентно !(a >= b)
  • a <= b эквивалентно a == b | a < b

Валидность битов

Единственный байт bool гарантированно инициализирован (другими словами, transmute::<bool, u8>(...) всегда безопасен — но поскольку некоторые битовые шаблоны являются недопустимыми для bool, обратное не всегда безопасно).