The problem is that 8797942068790 cannot be represented with 32 bit, and thus C# handles it as 64-bit. You can however convert back (value-wise) to 32 bit using:
x & ((1L<<32)-1)
This works as follows. 1L means that you represent 1 using a 64 bit long. Next you shift it to the left by 32 places. This means that you obtain the value that is just higher than the maximum representable number with 32 bit. By subtracting 1, all 32 lowest bits are one, and all others zero, so: ((1L<<32)-1) is binary equal to:
00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111
Now by using a bitwise &, you thus mask all values out that cannot be represented by 32 bit.
So for your example, this means:
csharp> (8797569417216^909522486)&((1L<<32)-1)
1849046582
(used the csharp interactive shell).
After that you can convert the result to an int, or an uint. An uint is unsigned, and so it is guaranteed that the value can be stored in an uint. An uint however, cannot work with negative numbers.