gpt4 book ai didi

rust - 找出介于0和带符号int的无符号int之和之间的最大值

转载 作者:行者123 更新时间:2023-12-03 11:43:52 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,它将采用X位置和偏移量。此偏移量可以为负也可以为正,因此我需要对其进行签名。因此,如果我将它传递给X = 0ofs = -3,我还需要将该函数设置为X0,或者如果我将它传递给X = 0ofs = 6uppr_lmt = 5,我需要将其设置为5

fn test(x: &mut u32, ofs: i32, uppr_lmt: u32) {
use std::cmp::max;

if ofs < 0 {
x = max(0, x + ofs);
} else {
x = max(uppr_lmt, x + ofs);
}
}
但是,在此代码中,rust提示将 i32添加到 &mut u32,并且 0uppr_lmt的类型不是 &mut u32。我该如何解决这个问题?我对Rust还是很陌生,不习惯键入转换。

最佳答案

下面的代码返回一个u32,而不是x值。请注意,由于i32中的负数存储方式,我们将对i64进行额外的转换,因为-3将被视为大于0(负数的MSB为1,而u32的MSB为2的幂)。请注意,我在其他情况下使用了min,因为否则,对于传递给函数的0,5,6,它返回6,因为5和6的最大值是6,这不是您从问题中所期望的

 fn test(x: u32, ofs: i32, uppr_lmt: u32) -> u32 {
use std::cmp::{max,min};
let y;
if ofs < 0 {
y = max(0, x as i64 + ofs as i64);
} else {
y = min(uppr_lmt as i64, x as i64 + ofs as i64);
}
y as u32
}
代替输入i64,您也可以像这样使用i32,假设输入在i32范围内而不是u32范围内(如果数字加偏移量小于2 ^ 31-1)
fn test(x: u32, ofs: i32, uppr_lmt: u32) -> u32 {
use std::cmp::{max,min};
let y;
if ofs < 0 {
y = max(0, x as i32+ ofs);
} else {
y = min(uppr_lmt as i32, x as i32+ ofs);
}
y as u32
}

关于rust - 找出介于0和带符号int的无符号int之和之间的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66272960/

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