gpt4 book ai didi

rust - 有没有办法获得 i32 的 u32 绝对值,它对 std::i32::MIN 做正确的事情?

转载 作者:行者123 更新时间:2023-11-29 08:24:13 28 4
gpt4 key购买 nike

This question它的答案描述了为什么 i32 上的 abs() 返回 i32 而不是 u32。它说“似乎公认的解决方法是使用 as u32 进行转换”。但是,如果参数是 std::i32::MIN,那么在 Debug模式下会出现 panic。标准库中有没有办法获得正确的值,或者我应该为这个值编写一个特殊情况的自己的实现 - 像这样:

fn my_abs(x: i32) -> u32 {
if x == std::i32::MIN {
(-(x as i64)) as u32
} else {
x.abs() as u32
}
}

最佳答案

我刚刚意识到 x.wrapping_abs() as u32 做了我想要的:std::i32::MIN 以外的所有数字都映射到它们的绝对值首先作为 i32,然后转换为 u32,std::i32::MIN 保持不变,但随后将其转换为 u32 恰好将其转换为其绝对值。这也适用于其他位宽。

关于rust - 有没有办法获得 i32 的 u32 绝对值,它对 std::i32::MIN 做正确的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58030504/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com