我想减去两个用户提供的整数,并存储结果范围长度。我显然无法将其存储为整数,例如减去int.MaxValue
和int.MinValue
会溢出一个int。
我写了这个:
uint rangeLength = (uint)max - (uint)min
它适用于所有情况,但是当两个整数中的一个为负数时,您可以看到强制转换为uint
类型。但是,这一行给出了正确的结果。
这似乎做了同样的事情,再做两次操作,但没有溢出:
uint rangeLength = ((uint)max + int.MaxValue) - ((uint)min + int.MaxValue);
在我的代码中使用它的第一行是否可以接受,还是太混乱了?我应该使用第二个,以免它看起来像是错误吗?
答案 0 :(得分:2)
如果它适用于所有情况,那么我认为可读性是您唯一需要担心的事情。
您似乎已正确命名变量 - rangeLength
。你写道它等于max - min
,所以人们可能会理解你在做什么。如果您将结果命名为a
或类似的东西,那就不好了。如果您真的很担心,请将其作为一种方法并抽象出实施细节:
public uint RangeBetween(int max, int min) {
return (uint)max - (uint)min;
}
uint rangeLength = RangeBetween(max, min);