Инверсия битов целого в Rust
Каждый бит целого меняется на противоположный:
ноль становится единицей, единица нулем.
Для целых перед числом пишут тот же знак,
что и для логического не у bool,
но смысл другой: переворачиваются все
разряды записи, а не одно истинное значение.
Для bool этот знак только меняет
истину на ложь и наоборот. Здесь работаем
только с целыми, чаще с узким беззнаковым
типом, чтобы результат помещался в привычный
диапазон.
Посмотрим на нулевое значение типа и на обычное маленькое число:
fn main() {
let all = !0u8;
let x = 5u8;
let inv = !x;
println!("{} {}", all, inv);
}
Даны числа:
let v = 0u8;
Получите из v число, где каждый
разряд u8 стал единицей, и выведите
его.
Даны числа:
let n = 8u8;
Замените каждый разряд n на
противоположный и выведите результат.
Дан следующий код:
let ok = true;
let byte = 1u8;
Скажите, переворачивает ли восклицательный
знак перед ok разряды byte
так же, как перед самим byte.