Логический тип
#![allow(unused)] fn main() { let b: bool = true; }
Логический тип или bool — это примитивный тип данных, который может принимать одно из двух значений, называемых true (истина) и false (ложь).
Значения этого типа могут быть созданы с помощью выражения-литерала с использованием
ключевых слов true и false, соответствующих значениям с теми же именами.
Этот тип является частью прелюдии языка с именем bool.
Объект с логическим типом имеет размер и выравнивание по 1 байту каждый.
Значение false имеет битовый шаблон 0x00, а значение true имеет битовый шаблон
0x01. Неопределенное поведение — для объекта с логическим типом иметь
любой другой битовый шаблон.
Логический тип является типом многих операндов в различных выражениях:
- Операнд условия в выражениях if и выражениях while
- Операнды в выражениях ленивых логических операторов
Note
Логический тип ведет себя похоже, но не является перечислимым типом. На практике это в основном означает, что конструкторы не связаны с типом (например,
bool::true).
Как и все примитивы, логический тип реализует
трейты Clone, Copy, Sized,
Send и Sync.
Note
Смотрите документацию стандартной библиотеки для библиотечных операций.
Операции над логическими значениями
При использовании определенных операторных выражений с логическим типом для его операндов, они вычисляются с использованием правил булевой логики.
Логическое НЕ
b | !b |
|---|---|
true | false |
false | true |
Логическое ИЛИ
a | b | a | b |
|---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
Логическое И
a | b | a & b |
|---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
Логическое исключающее ИЛИ
a | b | a ^ b |
|---|---|---|
true | true | false |
true | false | true |
false | true | true |
false | false | false |
Сравнения
a | b | a == b |
|---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | true |
a | b | a > b |
|---|---|---|
true | true | false |
true | false | true |
false | true | false |
false | false | false |
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, обратное не всегда безопасно).