Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ulong和long变量之间的力相加_C#_Casting_Addition_Unsigned_Signed - Fatal编程技术网

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
和return
long
进行计算对我来说并不合适。看那边:@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
    }