如何在C#中实现与R、NodeJS结果一致的按位异或计算
实现方案
核心原理
R、NodeJS执行按位异或运算时,会自动将输入数值截断为32位有符号整数后再执行运算,C#默认不会执行该自动截断操作,需要手动对齐转换规则即可得到一致结果。
可直接运行的代码
// 方式1:直接转换后运算 unchecked { int val1 = (int)2496638211; int val2 = (int)-1798328965; int result = val1 ^ val2; // result 输出为 120 }
如果需要封装成通用方法,可以使用以下实现:
/// <summary> /// 对齐R/NodeJS规则的32位按位异或运算 /// </summary> public static int BitXor32(long numA, long numB) { unchecked { return (int)numA ^ (int)numB; } } // 调用示例 int res = BitXor32(2496638211, -1798328965); // 返回值为120
关键逻辑说明
unchecked关键字的作用是关闭C#默认的整数溢出检查,实现和R/NodeJS一致的自动截断逻辑,否则数值超过32位有符号整数范围时会抛出溢出异常- 转换为
int(C#中int默认是32位有符号整数)后再执行^异或运算,运算规则和R、NodeJS完全一致
内容的提问来源于stack exchange,提问作者MC101
相关产品推荐
相关产品推荐

