ulong和long变量之间的力加法

时间:2018-09-21 18:26:24

标签: c# casting addition unsigned signed

我具有以下功能:

ulong

但是C#编译器说我不能添加longxlong.MaxValue可以大于min,而select * from pg_stat_replication;可以为负数。所以我不能将一个投向另一个。如何进行? :-(

2 个答案:

答案 0 :(得分:4)

  

C#编译器说我不能添加ulong和long。

正确。

  

x可以大于long.MaxValue,而min可以为负。

正确。

  

所以我不能一个投向另一个。

不正确。投放他们。走着瞧吧!您可能会感到惊喜。

长/长运算没有区别;位模式完全相同,并且编译为相同的代码。只是位的解释不同。

一个警告的词:有可能将C#置于一种模式,在这种模式下,当涉及整数算术的溢出发生时,它就会崩溃,而您显然不想在这里崩溃。通过使用表达式或语句形式的class Root():功能,即使某人打开了“默认情况下已选中”,您也可以确保不会发生这种情况。

答案 1 :(得分:0)

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
    }