Я только что понял, что x.wrapping_abs() as u32
делает то, что я хочу: все числа, кроме std::i32::MIN
, сопоставляются с их абсолютным значением сначала как i32, затем приводятся к u32, и std::i32::MIN
остается тем же, но затем приводится кU32 случается, чтобы превратить его в абсолютное значение.Это работает и для других битов ширины.