You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#与JavaScript中Bitwise XOR运算结果不一致的原因及解决方案

运算结果不一致的原因

两种语言位运算的默认整数处理规则不同:

  • JavaScript执行所有位运算前,都会自动把操作数转换为32位有符号补码整数,运算结果也按32位有符号整数解析。2654435769已经超过32位有符号整数的最大值(2^31-1 = 2147483647),会被自动截断高位,异或运算后得到的结果按32位有符号解析就是负数-1639703856。
  • C#的位运算规则由操作数的声明类型决定,示例中用的long是64位有符号整数,2654435769远小于64位有符号整数的取值上限,运算时不会做32位截断,最终异或结果按64位有符号解析得到正整数2655263440。
C# 中得到与JS一致结果的方法

只需要模拟JS的32位有符号整数运算逻辑即可,注意要加unchecked上下文避免溢出报错:

unchecked
{
    int a = (int)2654435769;
    int b = (int)7562089;
    var result = a ^ b; 
    // 运行结果为 -1639703856,和JavaScript输出完全一致
}

如果不想修改原始变量的类型,也可以在运算后做转换:

long a = 2654435769;
long b = 7562089;
int result = unchecked((int)(a ^ b));

内容的提问来源于stack exchange,提问作者LincolnGrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:18:02