C# ulong和long变量之间的力相加
我有以下功能:C# ulong和long变量之间的力相加,c#,casting,addition,unsigned,signed,C#,Casting,Addition,Unsigned,Signed,我有以下功能: long Foo (long min, long max) { ulong range = max - min; // guaranteed to fit in ulong ulong x = GenerateRandomULongBetween0AndRange(range); return x + min; // result is guaranteed to fit in long } 但是C编译器说我不能添加ulong和longx可以大于long
long Foo (long min, long max)
{
ulong range = max - min; // guaranteed to fit in ulong
ulong x = GenerateRandomULongBetween0AndRange(range);
return x + min; // result is guaranteed to fit in long
}
但是C编译器说我不能添加ulong
和long
x
可以大于long。但是MaxValue
和min
可以为负数。所以我不能把一个扔给另一个。如何进行-(学习铸造
例子
ulong min=2;
ulong范围=12-2;//保证适合ulong
ulong x=(ulong)范围;
长we=(长)x+(长)min;
long.MinValue=-9223372036854775808
long.MaxValue=9223372036854775807
18446744073709551615
C#编译器说我不能添加ulong和long
对
x可以大于long.MaxValue,而min可以为负值
对
所以我不能把一个扔给另一个
不正确。投下它们。看看会发生什么!你可能会惊喜不已
Long/ulong算法没有什么不同;位模式完全相同,它编译成相同的代码。不同的只是位的解释
警告一句:当出现涉及整数运算的溢出时,可能会将C#置于崩溃模式,并且您明确不希望在此处崩溃。您可以确保即使有人打开“默认选中”,也不会发生这种情况通过在表达式或语句形式中使用未选中的功能。如何继续取决于您希望提供的准确性和计算范围。但无论如何,使用ulong
和returnlong
进行计算对我来说并不合适。看那边:@MistyK:听起来不错,所以我确实可以简单地转换min
到ulong
并且计算溢出到了预期值。他们确实在过去的日子里考虑了很多事情应该如何运作。@D.R.我已经删除了我的答案,你是对的,不值得在这里使用十进制。可能重复
learn casting
example
ulong min=2;
ulong range = 12 - 2; // guaranteed to fit in ulong
ulong x = (ulong) range;
long we= (long)x +(long) min;
long.MinValue = -9223372036854775808
long.MaxValue = 9223372036854775807
18446744073709551615 <-- Max ulong
0 <-- Minulong
long can be negative and positive both.
long range = long.MaxValue - 0; // guaranteed to fit in
long x = GenerateRandomLongBetween0AndRange(range);
`x= Math.Abs(x ) to get positive values if you are using long` for that.
Even your function is ok just change signature here
long Foo (long min, long max)
{
ulong range = max - min; // guaranteed to fit in long
ulong x = GenerateRandomULongBetween0AndRange(range);
return (long) x +(long) min; // result is guaranteed to fit in long
}