let number: i8 = -6;
println!("{number:b}");
let number2: u8 = number as u8;
println!("{number2}");
println!("{number2:b}");
Результат выполнения:
11111010
250
11111010
То есть последовательность битов та же, но интерпретация другая! Это происходит не только в Rust, но и в других языках, к примеру, в C.
С u8 ситуация может быть не сильно лучше:
let number: u8 = 255;
let number2: i8 = number as i8;
println!("{number2}");
На экран будет выведено
-1.Из всего этого следует важный вывод: конвертировать числа таким образом стоит с большой осторожностью, потому что это может привести к неожиданным проблемам и серьёзным багам. Инструмент Clippy даже выдаст предупреждение на моменте
number as i8. Если вам нужно просто "отбросить" знак, то следует использовать функцию "модуль" .abs().