gpt4 book ai didi

c++ - 围绕一个范围包装无符号整数加法/减法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:36:53 28 4
gpt4 key购买 nike

我需要一个函数来计算 unsigned val 的总和和 signed dX并将结果包装在 lower 范围内和 upper

例如:

值为 5 , 变化 -6 , 以及 0 的范围和 10会返回 10 .

< 1 2 3 4 5 6 7 8 9 10 >

值为 2 , 变化 3 , 和 1 的范围和 3会返回 2

/*
* Given a value and a change in that value (dX), find the sum and wrap it between lower and upper.
*/
unsigned int wrap(unsigned int val, const int dX, const unsigned int lower, unsigned int upper)
{

}

我真的不知道如何处理无符号和有符号的加法/减法以避免下溢。我也不确定如何包装下限。

最佳答案

如果您愿意将dxconst int 更改为int,您可以在循环中进行算术运算。这避免了 upper - lower 超过 INT_MAX 可能出现的问题。

#include <stdio.h>

unsigned int wrap_add(unsigned int val,
int dx,
const unsigned int lower,
const unsigned int upper);

int main(void)
{
printf("Range [0, 10]: 5 + (-6) = %u\n", wrap_add(5, -6, 0, 10));
printf("Range [1, 3]: 2 + 3 = %u\n", wrap_add(2, 3, 1, 3));
printf("Range [2, 5]: 2 + (-9) = %u\n", wrap_add(2, -9, 2, 5));

return 0;
}

unsigned int wrap_add(unsigned int val,
int dx,
const unsigned int lower,
const unsigned int upper)
{
while (dx < 0) {
if (val == lower) {
val = upper;
} else {
--val;
}
++dx;
}

while (dx > 0) {
if (val == upper) {
val = lower;
} else {
++val;
}
--dx;
}

return val;
}

程序输出:

Range [0, 10]: 5 + (-6) = 10
Range [1, 3]: 2 + 3 = 2
Range [2, 5]: 2 + (-9) = 5

关于c++ - 围绕一个范围包装无符号整数加法/减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42941088/

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