Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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#和javascript中使xor结果相等_Javascript_C#_Xor - Fatal编程技术网

如何在c#和javascript中使xor结果相等

如何在c#和javascript中使xor结果相等,javascript,c#,xor,Javascript,C#,Xor,我正在尝试将一些javascript代码转换为c代码。在javascript中,我有这样一个表达式: var result = 8797569417216^909522486; 然后,结果变量包含值1849046582。我听说javascript使用32位数字作为位运算符,但我不知道如何使用这些信息在c#中获得相同的结果。当我运行同一行代码时,结果包含8797942068790 我缺少什么?您可以将结果转换为int: var result = 8797569417216^909522486;

我正在尝试将一些javascript代码转换为c代码。在javascript中,我有这样一个表达式:

var result = 8797569417216^909522486;
然后,结果变量包含值1849046582。我听说javascript使用32位数字作为位运算符,但我不知道如何使用这些信息在c#中获得相同的结果。当我运行同一行代码时,结果包含8797942068790


我缺少什么?

您可以将结果转换为
int

var result = 8797569417216^909522486;
var realResult = unchecked((int) result);

请注意未选中,因为您的值明显大于Int32。

问题在于
8797942068790
不能用32位表示,因此C#将其处理为64位。但是,您可以使用以下方法将(按值)转换回32位:

x & ((1L<<32)-1)
现在,通过使用逐位
&
,可以屏蔽所有不能用32位表示的值

以你的例子来说,这意味着:

csharp> (8797569417216^909522486)&((1L<<32)-1)
1849046582

csharp>(8797569417216^909522486)和((1)你想要相同的结果吗?你得到的结果是错误的-c#给出了正确的值…附录:不要忘记JavaScript(9007199254740991)中的最大安全整数,在这个值之后,结果会不同,因为JS中的数字是以浮点形式存储的。在这种情况下,屏蔽是过分的(尽管知道可能很好)并且您仍然存在将
long
转换为
int
的问题(但我们不确定OP是否希望
Int32
)@Sinatr:在这种情况下,可以使用
uint
。我同意使用
未选中的
是最好的方法。不过,知道如何使用一些比特黑客还是很有用的。
csharp> (8797569417216^909522486)&((1L<<32)-1)
1849046582