C# 为什么下面的代码提供不同的结果?

C# 为什么下面的代码提供不同的结果?,c#,.net,C#,.net,这些是128位XorShiftPRNG的函数,通过查看代码,我从未想到类型的不同(Int32/UInt32)可能会产生不同的结果。在这两种情况下,我们操作相同的位集,这些位向左或向右移位相同的字节数,那么为什么我们得到不同的结果呢 Int32 XorShift128(Int32 x, Int32 y, Int32 z, Int32 w) { var t = x ^ (x << 11); x = y; y = z; z = w; return

这些是128位
XorShift
PRNG的函数,通过查看代码,我从未想到类型的不同(Int32/UInt32)可能会产生不同的结果。在这两种情况下,我们操作相同的位集,这些位向左或向右移位相同的字节数,那么为什么我们得到不同的结果呢

Int32 XorShift128(Int32 x, Int32 y, Int32 z, Int32 w)
{
    var t = x ^ (x << 11);

    x = y;
    y = z;
    z = w;

    return w = w ^ (w >> 19) ^ t ^ (t >> 8);
}

UInt32 XorShift128(UInt32 x, UInt32 y, UInt32 z, UInt32 w)
{
    var t = x ^ (x << 11);

    x = y;
    y = z;
    z = w;

    return w = w ^ (w >> 19) ^ t ^ (t >> 8);
}

void Main()
{
    Random rand = new Random();

    for (var i = 0; i < 10000000; i++) {
        var x = rand.Next();
        var y = rand.Next();
        var z = rand.Next();
        var w = rand.Next();

        var u = XorShift128(x,y,z,w);
        var v = XorShift128((UInt32)x,(UInt32)y,(UInt32)z,(UInt32)w);

        if ((Int32)v != u) {
            Console.WriteLine(x);
            Console.WriteLine(y);
            Console.WriteLine(z);
            Console.WriteLine(w);
            Console.WriteLine(u);
            Console.WriteLine((Int32)v);
            Console.WriteLine("-----------------");
        }
    }
}
Int32 XorShift128(Int32 x,Int32 y,Int32 z,Int32 w)
{
变量t=x^(x>19)^t^(t>>8);
}
UInt32异或移位128(UInt32 x、UInt32 y、UInt32 z、UInt32 w)
{
变量t=x^(x>19)^t^(t>>8);
}
void Main()
{
Random rand=新的Random();
对于(变量i=0;i<10000000;i++){
var x=rand.Next();
var y=rand.Next();
var z=rand.Next();
var w=rand.Next();
var u=XorShift128(x,y,z,w);
var v=XorShift128((UInt32)x,(UInt32)y,(UInt32)z,(UInt32)w);
如果((Int32)v!=u){
控制台写入线(x);
控制台写入线(y);
控制台写入线(z);
控制台写入线(w);
控制台写入线(u);
控制台写入线((Int32)v);
Console.WriteLine(“--------------------------”;
}
}
}

由于系统发育,答案在评论中给出:

-2 >> 1 == -1

右移负数不会移动符号位(
-2>>1==-1
)。在
XorShift128
中赋值的意义是什么<代码>x、
y
z
在作业后不使用。@Phylogenesis,谢谢!你已经回答了为什么我的课程工作不正常,它发生在大约10年前的某个地方)现在我肯定知道了。)@xxbbcc关于这一点,你是对的,这样做没有意义:)