作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!