[英]c# increase 2 number untill max value
所以我有 2 个numbers
:
4 bit - Allowed range is 0-15
12 bit - Allowed range is 0-4095
我想创建function
获得 2 个numbers
并增加这 2 个numbers
,首先是 12 bit
数字,然后在此数字达到最大值后将其设置为零并增加第二个number
。
例如:
for 1 and 2 - 1, 3
for 1 and 4094 - 1, 4095
for 1 and 4095 - 2, 0
for 15 and 4095 - 0, 0
这是我的解决方案:
public static Tuple<int, int> IncreaseSequenceControl(int firstNumber, int secondNumber)
{
if (firstNumber < 15)
{
if (secondNumber < 4095)
{
secondNumber += 1;
return Tuple.Create<int, int>(firstNumber, secondNumber);
}
else
{
firstNumber += 1;
secondNumber = 0;
return Tuple.Create<int, int>(firstNumber, secondNumber);
}
}
else
{
firstNumber = 0;
return Tuple.Create<int, int>(firstNumber, secondNumber);
}
}
任何其他或更优雅的解决方案,或者这很好?
这可以通过多种方式完成,这是一个单行:
public static (int, int) IncreaseSequenceControl(int firstNumber, int secondNumber) => (
(firstNumber + Math.DivRem(secondNumber + 1, 4096, out int remainder))
is <= 15 and var result
? result
: 0,
remainder
);
为了使这一点更清楚,我将编写上述解决方案的更具可读性的版本:
// First number is the 4 bit number
// Second number is the 12 bit number
public static (int, int) IncreaseSequenceControl(int firstNumber, int secondNumber)
{
int quotient = Math.DivRem(secondNumber + 1, 4096, out int remainder);
// The quotient represents how many times the 4095 limit has been hit.
// If the quotient is 0, the secondNumber is less than 4096.
// The remainder will contain the value left after incrementing the firstNumber as many times as the value of the quotient, so remainder can be assigned to second number
// Increment firstNumber as many times as the 4096 limit was hit
int result = firstNumber + quotient;
if (result <= 15)
{
firstNumber = result;
}
else
{
// If result is greater than 15, set to 0
firstNumber = 0;
}
// The leftover value after the quotient
secondNumber = remainder;
return (firstNumber, secondNumber);
}
Math.DivRem()
function 接受被除数和除数并返回商。 function 还接受一个out
参数,通过该参数将返回余数。
此外,您可能已经注意到我将(int, int)
作为返回类型。 这是System.ValueTuple<int, int>
的简写方式/语法糖。 建议使用ValueTuple
而不是使用Tuple
。 首先,因为他们提供了这种语法糖。 其次,通过Tuple
class 将元组实现为引用类型被认为是一个“错误”,已通过ValueTuple
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.